Преобразование строки в метку времени в 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