Groovy продолжительность времени

Обновить

December 2018

Просмотры

2k раз

2

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

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, где я буду неправильно?

Спасибо, Дон

4 ответы

1

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

13

Я хотел бы сделать что-то подобное

def elapsedTime(Closure closure){
    def timeStart = new Date()
    closure()
    def timeStop = new Date()
    TimeCategory.minus(timeStop, timeStart)
}

то

TimeDuration timeDuration = elapsedTime { /*code you want to time*/ }
4

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

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

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 для Date показывает , что конструктор с комментарием:

Дата (интермедиат год, Int месяц, дата целое)

Устаревшее. По состоянию на JDK версии 1.1, заменен на Calendar.set (год + 1900, месяц, дата) или GregorianCalendar (год + 1900, месяц, дата).

Это приводит меня к мысли, что:

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

Является ли actualy создания даты для Дня нового года в году 3900

46

Если вы просто хотите, чтобы найти разницу между двумя временами вы создаете сами (например, чтобы увидеть, как долго что-то нужно, чтобы выполнить), вы можете использовать:

import groovy.time.*

def timeStart = new Date()
// Some code you want to time
def timeStop = new Date()
TimeDuration duration = TimeCategory.minus(timeStop, timeStart)
println duration

Если вам нужно специально для работы с датами, как поставляются в виде строки выше. Попробуйте это, первый формат из них является немного странным, в частности, +01: 00, что часовой пояс, я бы ожидать, что это будет +0100 для формата работу. Вы можете просто удалить часовой пояс, я просто сделал замену.

import groovy.time.*

def start = Date.parse("yyy-MM-dd'T'HH:mm:ss.SSSZ","2010-10-07T22:15:33.110+01:00".replace("+01:00","+0100"))
println start
def end = Date.parse("yyy-MM-dd'T'HH:mm:ss.SSSZ","2010-10-07T22:19:52.356+01:00".replace("+01:00","+0100"))
println end
TimeDuration duration = TimeCategory.minus(end, start)
println duration

Выходы

Thu Oct 07 15:15:33 MDT 2010
Thu Oct 07 15:19:52 MDT 2010
4 minutes, 19.246 seconds