Обновление: Java 9 Stream
теперь поставляется с методом takeWhile .
Нет необходимости в хаках или других решениях. Просто используйте это!
Я уверен, что это может быть значительно улучшено: (кто-то может сделать его потокобезопасным, возможно)
Stream stream = Stream.iterate(0, n -> n + 1);
TakeWhile.stream(stream, n -> n < 10000)
.forEach(n -> System.out.print((n == 0 ? "" + n : "," + n)));
class TakeWhile implements Iterator {
private final Iterator iterator;
private final Predicate predicate;
private volatile T next;
private volatile boolean keepGoing = true;
public TakeWhile(Stream s, Predicate p) {
this.iterator = s.iterator();
this.predicate = p;
}
@Override
public boolean hasNext() {
if (!keepGoing) {
return false;
}
if (next != null) {
return true;
}
if (iterator.hasNext()) {
next = iterator.next();
keepGoing = predicate.test(next);
if (!keepGoing) {
next = null;
}
}
return next != null;
}
@Override
public T next() {
if (next == null) {
if (!hasNext()) {
throw new NoSuchElementException("Sorry. Nothing for you.");
}
}
T temp = next;
next = null;
return temp;
}
public static Stream stream(Stream s, Predicate p) {
TakeWhile tw = new TakeWhile(s, p);
Spliterator split = Spliterators.spliterator(tw, Integer.MAX_VALUE, Spliterator.ORDERED);
return StreamSupport.stream(split, false);
}
}
Вы могли сохранить его как целое число числа минут в прошлую полночь:
, например,
0 = 00:00
60 = 01:00
252 = 04:12
необходимо было бы однако написать некоторый код для воссоздания времени, но это не должно быть хитро.
Попробуйте smalldatetime. Это не может дать Вам, что Вы хотите, но поможет, что Вам в Вашем будущем нужно в манипуляциях датой/временем.
Вместо минут мимо полуночи мы храним его, поскольку 24 часа синхронизируют как SMALLINT.
9:12 = 912 14:15 = 1415
при преобразовании назад в "человекочитаемую форму" мы просто вставляем двоеточие ":" два символа справа. Лево-клавиатура с нулями, если Вы должны. Сохраняет математику каждый путь и использует несколько, меньше байтов (по сравнению с varchar), плюс осуществляет это, значение является числовым (а не алфавитно-цифровым)
Довольно глупый, хотя... должен был быть тип данных ВРЕМЕНИ в MS SQL в течение многих лет уже, по моему скромному мнению...
Вы уверены, что Вам будут только когда-либо требоваться часы и минуты? Если Вы хотите сделать что-либо значимое с ним (как, например, вычисляют отрезки времени между двумя такими точками данных), не наличие информации о часовых поясах и DST может дать неправильные результаты. Часовые пояса, возможно, не применяются в Вашем случае, но DST несомненно будет.
Я преобразовал бы их в целое число (HH*3600 + MM*60) и сохранил бы его тот путь. Небольшой размер ресурса хранения, и все еще достаточно легкий работать с.
так как Вы не упоминали, что это укусило, если Вы находитесь на SQL Server 2008, можно использовать тип данных времени, иначе используют минуты с полуночи
Просто сохраните регулярную дату и время и проигнорируйте все остальное. Почему тратят написание кода дополнительного времени, которое загружает интервал, управляет им и преобразовывает его в дату и время, когда Вы могли просто загрузить дату и время?
Если Вы используете использование MySQL тип поля ВРЕМЕНИ и связанной функциональности, которая идет со ВРЕМЕНЕМ.
0:00:00 стандартный формат времени Unix.
, Если когда-нибудь необходимо оглядываться назад и рассматривать таблицы вручную, целые числа могут более сбивать с толку, чем фактическая метка времени.
Если Вы используете SQL Server 2008 +, рассматриваете TIME
тип данных. статья SQLTeam с большим количеством примеров использования.
SQL Server на самом деле хранит время как части дня. Например, 1 целый день = значение 1. 12 часов являются значением 0,5.
, Если бы Вы хотите сохранить временную стоимость, не используя тип ДАТЫ И ВРЕМЕНИ, храня время в десятичной форме, удовлетворил бы той потребности, также делая преобразование в ДАТУ И ВРЕМЯ простым.
, Например:
SELECT CAST(0.5 AS DATETIME)
--1900-01-01 12:00:00.000
Хранение значения, поскольку ДЕСЯТИЧНОЕ ЧИСЛО (9,9) использовало бы 5 байтов. Однако, если бы точность к не наибольшей важности, РЕАЛЬНОЕ использовало бы только 4 байта. В любом случае совокупное вычисление (т.е. среднее время) может быть легко вычислено на числовые значения, но не на типы Данных/Времени.
Как предложила Кристен, экономия времени в формате UTC может помочь лучше.
Убедитесь, что вы используете 24-часовой формат, потому что в UTC не используется меридиан AM или PM.
Пример:
По-прежнему предпочтительнее использовать стандарт четырехзначный формат.