Как изменить заданную дату в формате «гггг-ММ-дд ЧЧ: мм: сс.ССС» на формат «гггг-ММ-дд'ТХЧ: мм: сс.ССС'З» в ​​Groovy - PullRequest
0 голосов
/ 20 марта 2019

Как преобразовать указанную дату в формате yyyy-MM-dd HH:mm:ss.SSS в yyyy-MM-dd'T'HH:mm:ss.SSS'Z' формат в groovy Например, указанная дата 2019-03-18 16:20:05.6401383. Я хочу, чтобы он был преобразован в 2019-03-18T16:20:05.6401383Z

Используемый код:

 def date = format1.parse("2019-03-18 16:20:05.6401383");
 String settledAt = format2.format(date)
 log.info ">>> "+*date*+"   "+*settledAt*

Результат, в котором дата как-то меняется: Mon Mar 18 18:06:46 EDT 2019 & 2019-03-18T18:06:46.383Z

Заранее спасибо за все ответы.

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Если вы используете Java 8+ и Groovy 2.5+, я бы использовал новый API Date / Time:

import java.time.*

def date = LocalDateTime.parse('2019-03-18 16:20:05.6401383', 'yyyy-MM-dd HH:mm:ss.nnnnnnn')
String settledAt = date.format(/yyyy-MM-dd'T'HH:mm:ss.nnnnnnn'Z'/)

Предполагается, что введенная дата имеет часовой пояс "Зулу".

0 голосов
/ 20 марта 2019

это особенность Java

def date = Date.parse("yyyy-MM-dd HH:mm:ss.SSS","2019-03-18 16:20:05.6401383")

возвращает

Mon Mar 18 18:06:46 EET 2019

проблема в том, что Java обрабатывает только миллисекунды SSS (3 цифры после секунд)

но вы предоставляете 7 цифр для миллисекунд 6401383

в качестве обходного пути удалите лишние цифры с помощью регулярного выражения:

def sdate1 = "2019-03-18 16:20:05.6401383"
sdate1 = sdate1.replaceAll( /\d{3}(\d*)$/, '$1') //keep only 3 digits at the end
def date = Date.parse("yyyy-MM-dd HH:mm:ss.SSS",sdate1)
def sdate2 = date.format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...