Groovy Время продолжительности - PullRequest
2 голосов
/ 12 октября 2010

Я пытаюсь получить разницу между двумя датами в днях, часах и секундах:

import groovy.time.*

Date now = new Date()

// Using deprecated constructor just for this example
Date newYearsDay2000 = new Date(2000, 0, 1)

use (TimeCategory) {
    now - newYearsDay2000
}

Это печатает:

-690023 дня, -14 часов, -38 минут, -27,182 секунд

Что явно не похоже на разницу между сегодняшней датой и 2000/1/1, где я ошибаюсь?

Спасибо, Дон

Ответы [ 2 ]

4 голосов
/ 12 октября 2010

Может быть проблема с устаревшим конструктором?

Если вы используете Calendar ( и Groovy обновленный метод ) для создания newYearsDay2000 var, вы получите:

import groovy.time.*
import static java.util.Calendar.*

Date now = new Date()
// Use the static imported Calendar class
Date newYearsDay2000 = instance.updated( year:2000, month:JANUARY, day:1 ).time

use( TimeCategory ) {
    now - newYearsDay2000
}

, что дает результат:

3925 days, 23 hours, 59 minutes, 59.999 seconds

Редактировать

Да, JavaDoc для даты показывает этот конструктор с комментарием:

Дата (int год, int месяц, int дата)

Запрещены. Начиная с версии 1.1 JDK, заменено на Calendar.set (год + 1900, месяц, дата) или GregorianCalendar (год + 1900, месяц, дата).

Что заставляет меня верить, что:

Date newYearsDay2000 = new Date(2000, 0, 1)

Фактически создает дату для нового года в году 3900

1 голос
/ 12 октября 2010

Дата Параметры: год - год минус 1900.

...