Преобразование строки в метку времени в Scala с использованием Java.time - PullRequest
0 голосов
/ 29 октября 2018

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

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 Ответ

0 голосов
/ 29 октября 2018
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
...