Простой класс дат в Java - PullRequest
       40

Простой класс дат в Java

0 голосов
/ 16 февраля 2011

Есть ли в Java класс даты, который я могу построить с помощью года, месяца, дня, часа, минуты, секунды и миллисекунды, а затем выполнить сравнения, которые дают количество миллисекунд между двумя значениями даты, игнорируя такие вещи, как летнее дополнительные секунды и т. д.? Могу ли я использовать для этого класс Calendar? Я думал об этом, но речь идет о високосных секундах и переходе на летнее время, и я не хочу, чтобы это влияло на расчеты.

Важно, чтобы следующий инвариант всегда выполнялся:

Для всех y1, y2, m1, м2, d1, d2, ч, м, с, мс:

(
    f(y1, m1, d1, h, m, s, ms).getTimeInMillis() - 
    f(y2, m2, d2, h, m, s, ms).getTimeInMillis()
) 
% 
(24 * 60 * 60 * 1000) == 0

Мне нужно знать, какой должна быть функция f.

Ответы [ 5 ]

3 голосов
/ 16 февраля 2011

Да, вы можете использовать класс Calendar для своих расчетов. Вы можете построить свои даты и использовать getTimeInMillis() для сравнения.

Я бы также порекомендовал java-библиотеку joda-time , которая имеет множество функций для дат. Он также имеет лучшую производительность.

1 голос
/ 16 февраля 2011

Вы можете использовать класс Calendar, чтобы установить свой год, месяц и другие данные.

Посмотрите на javadocs calendar.set() и calendar.getTime() методов.

Тогда date.getTime() даст вам абсолютные миллисекунды с 1970 года.

0 голосов
/ 04 марта 2011

Я бы попробовал использовать Joda DateTime, где вы могли бы сделать

DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1);
DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2);
long delta = d1.toMillis() - d2.toMillis();

Также учтите:

 DateTime d1 = new DateTime(y1,m1,d1,h1,m1,s1,ms1);
 DateTime d2 = new DateTime(y2,m2,d2,h2,m2,s2,ms2);
 Duration delta = new Duration( d1, d2);
 int days = delta.toPeriod().getDays();

Если у вас необычные потребности, вы можете посмотреть на объекты Joda Chronology.

0 голосов
/ 16 февраля 2011

Вы можете использовать DateUtils для манипулирования датой.Существует также целый новый API начиная с Java 8 .

0 голосов
/ 16 февраля 2011

Вы можете просто использовать долго. Но вам все равно придется беспокоиться о високосных днях. Вы можете сделать сравнение, как.

long start = System.currentTimeMillis(); // nanoTime is better for benchmarks
// do something.
long time = System.currentTimeMillis() - start;

Тем не менее, если вам нужно учитывать високосные годы и т. Д. Календарь может быть лучшим выбором, поскольку даты, естественно, грязные;) Вы можете рассмотреть библиотеку JodaTime, которая лучше, но не намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...