Подтвердить что ты не робот

Как создать новую дату в Groovy в определенные даты и время

Интересно, есть ли другой способ создания нового Date в Groovy в определенные даты и время, чем разбор его с String с помощью метода Date.parse. Могу ли я получить полный список создания Date в Groovy?

4b9b3361

Ответ 1

Вы можете использовать существующие методы Java для создания даты:

// takes the date encoded as milliseconds since midnight, January 1, 1970 UTC
def mydate = new Date(System.currentTimeMillis())

// create from an existing Calendar object
def mydate = new GregorianCalendar(2014, Calendar.APRIL, 3, 1, 23, 45).time

Groovy также предоставляет некоторые упрощенные расширения для создания дат. Date.parse() и Date.parseToStringDate() разобрать его из строки. Метод Date.copyWith() строит дату с карты. Вы можете использовать их следующим образом:

// uses the format strings from Java SimpleDateFormat
def mydate = Date.parse("yyyy-MM-dd hh:mm:ss", "2014-04-03 1:23:45")

// uses a format equivalent to EEE MMM dd HH:mm:ss zzz yyyy
def mydate = Date.parseToStringDate("Thu Apr 03 01:23:45 UTC 2014")

def mydate = new Date().copyWith(
    year: 2014, 
    month: Calendar.APRIL, 
    dayOfMonth: 3, 
    hourOfDay: 1,
    minute: 23,
    second: 45)

Ответ 2

Другие ответы устарели от Java 8 и более поздних версий. Старые устаревшие классы времени, такие как java.util.Date/.Calendar/.GregorianCalendar, оказались плохо спроектированными, запутанными и сложными.

java.time

Структура java.time заменяет эти старые классы.

Groovy может использовать эти классы, конечно. Я не знаю синтаксис Groovy, но для этого простого примера Java должен быть легко адаптирован.

LocalDate/LocalTime

Классы LocalDate и LocalTime не имеют понятия о часовом поясе. Поэтому они не представляют фактические моменты на временной шкале.

LocalDate localDate = LocalDate( 2016 , Month.JANUARY , 2 ); // year, month, date.
LocalTime localTime = LocalTime( 12 , 30 , 0 , 0 ); // hour, minute, second, nanosecond.

ZonedDateTime

Примените часовой пояс (ZoneId), чтобы получить ZonedDateTime. Используйте имя часового пояса, никогда не отмечаемые сокращения в 3-4 зонах.

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( localDate , localTime , zoneId );

Instant

Вам следует избегать старых классов времени. Но при необходимости вы можете конвертировать. Instant - это класс java.time, который представляет момент на временной шкале в формате UTC с разрешением наносекунд. Ищите новые методы для старого класса java.util.Date для преобразования в/из Instant. Мы можем извлечь необходимый объект Instant из нашего ZonedDateTime.

Наносекунда против Миллисекунды

Обратите внимание, что преобразование из java.time связано с потерей данных! Классы java.time поддерживают nanosecond разрешение (до девяти цифр десятичного разряда на дробной секунде), а старый java.util.Date поддерживает только миллисекунды (до трех знаков после запятой). Любая четвертая-девятая цифра дробной секунды усекается. Например, 2016-04-28T02:05:05.123456789 усекается до 2016-04-28T02:05:05.123.

Instant instant = zdt.toInstant();
java.util.Date utilDate = java.util.Date.from( instant );

Переход в другое направление, от java.util.Date до Instant. От 4-го до девятого десятичного разряда дробной секунды будут нули, 1-й-3-й для любых миллисекунд.

Instant instant = utilDate.toInstant();

Ответ 3

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

Возможно, эта ссылка будет полезной.

Или этот фрагмент кода:

def calendar = new GregorianCalendar(2011,1,7,15,7,23)
def date = calendar.getTime()
println date

Ответ 4

Groovy хорош.

new Date(2016-1900, 7, 16, 20, 32, 25)

Вт Авг 16 20:32:25 PDT 2016

Обратите внимание, что год должен быть массирован, но вы можете создать новую дату Java, представляющую любую секунду, в которой вы хотите.

Вы можете увидеть больше Groovy Добра на http://mrhaki.blogspot.com/2009/08/groovy-goodness-working-with-dates.html

Ответ 5

Вы можете использовать текущую дату и форматировать ее так, как хотите:

`/*
 y: year
 m: month
 d: day
 h: hour
 m: minute
*/
Date().format('yyyy-MM-dd hh-mm') 
Date().format('yy/mm/dd hh') 

И это вернет строку.