как преобразовать метку времени ISO 8601 в unix метку времени в scala - PullRequest
0 голосов
/ 20 апреля 2020

Для преобразования unix отметки времени в ISO 8601 я использую метод .toDateTime (), что если я хочу преобразовать отметку времени ISO 8601 в unix отметку времени в scala?

for {
JString(format) <- Some(format)
JInt(timestamp) <- Some(timestamp)
JString(timezone) <- Some(timezone)
res <- JString(new DateTime(timestamp.toLong).toDateTime(DateTimeZone.forID(timezone)).toString(format))
} yield res
res

1 Ответ

0 голосов
/ 21 апреля 2020

Прежде всего - используйте пакет java.time, основанный на Joda Time (используйте последний, если вы используете очень старую JVM, у которой не было java.time). Ваш код выглядит как java.sql функции времени - избегайте их.

Из вашего кода кажется, что вы хотите взять эпоху, вернуть форматированную строку и подтвердить часовой пояс одним способом.

Epoch to LocalDateTime:

java.time.LocalDateTime.ofEpochSecond(1587416590, 0, java.time.ZoneOffset.UTC)

это: секунды эпохи, наносекунды и смещение времени.

Для преобразования LocalDateTime в строку вам необходим формат, например:

localDateTime.format(java.time.format.DateTimeFormatter.ISO_DATE_TIME)

, если у вас есть Целевой формат определяется как строка, которую вы можете создать в формате:

val formatter = java.time.format.DateTimeFormatter.ofPattern(format)

Всего:

java.time.LocalDateTime.ofEpochSecond(
  epochSeconds,
  nanosIfYouHaveThem,
  offset
).format(java.time.format.DateTimeFormatter.ofPattern(targetFormat))

Если вы хотите сделать обратное? Вы используете:

java.time.LocalDateTime.parse(
  timestamp,
  format
).toEpochSecond(offset)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...