Преобразование строки в метку времени в Scala с использованием Java.time

Я пытаюсь преобразовать приведенный ниже формат строки в метку времени

Mon Oct 29 14:33:09 MYT 2018в 2018-10-29T14:33:09.756Z

это мой код

val format = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" )
print(LocalDateTime.parse(approximateArrivalTimestamp.toString(), format).atZone(ZoneId.systemDefault()).toInstant().toString())

и вывод

2018-10-29T14:33:09Z

Каким образом я могу получить временную метку до степени детализации миллисекунд, как 2018-10-29T14:33:09.756Z

Любая помощь высоко ценится.

1 ответ

val dateString = "Mon Oct 29 14:33:09 MYT 2018"
val formatter = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" )

val date = LocalDateTime.parse(dateString, formatter).atZone(ZoneId.systemDefault())

val formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX")

date.format(formatter2)

По какой-то странной причине вы интерпретируете это как LocalDateTime, Я думаю, что вы должны использовать ZonedDateTime проанализировать дату и затем преобразовать ее в ваш часовой пояс (он будет правильно преобразовывать дату в ваш местный часовой пояс).

val dateString = "Mon Oct 29 14:33:09 MYT 2018"
val formatter = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" )

val date = ZonedDateTime.parse(dateString, formatter).withZoneSameInstant(ZoneId.systemDefault())

val formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX")

date.format(formatter2)

И если вы хотите, чтобы дата была с Z (Z представляет часовой пояс, который будет UTC), тогда вам придется преобразовать его для UTC.

val date2 = date.withZoneSameInstant(ZoneId.of("UTC"))

date2.format(formatter2)
// String = 2018-10-29T06:33:09.000Z
Другие вопросы по тегам