как обрабатывать крайний регистр при использовании Java .time для преобразования даты и времени в эпоху - PullRequest
0 голосов
/ 06 мая 2020

Это мой код, который преобразует дату и время в временную метку эпохи, есть один случай, с которым я не знаю, как справиться, если информация о зоне включена в метку времени и не передана в качестве третьего аргумента этой функции, она будет всегда преобразовываться в UT C, независимо от того, какой часовой пояс указан в метке времени, как решить эту проблему?

  time_to_epoch(List(JString("2007-12-03T10:15:30 CET"), JString("yyyy-MM-dd'T'HH:mm:ss z"))) shouldEqual JString("1196669730000")

time_to_epoch (List (JString ("2007-12-03T10: 15: 30 + 02 : 00 "), JString (" yyyy-MM-dd'T'HH: mm: ssXXX "), JString (" CEST "))) shouldEqual JString (" 1196669730000 ") time_to_epoch (List (JString (" 2007-12- 03T10: 15: 30 CEST "), JString (" yyyy-MM-dd'T'HH: mm: ss z "))) shouldEqual JString (" 1196673330000 ")

 whatever timezone in the timestamp, the result is wrong, i.e, CEST(+02:00), output (+01:00), America/Mexico_City(+05:00), output (+04:00)

1 Ответ

0 голосов
/ 06 мая 2020

Если данные часового пояса могут быть частью строки timestamp, вам, вероятно, следует позволить этому переопределить строку timezone независимо от того, была она предоставлена ​​по умолчанию или нет.

formatter.parseBest(timestamp, ZonedDateTime.from _
                             , LocalDateTime.from _
                             , LocalDate.from _) match {
  case zdt: ZonedDateTime =>
    JString(zdt.toInstant().toEpochMilli.toString)
  case ldt: LocalDateTime =>
    . . .
...