17

我正在尝试将日期/时间字符串来回转换为LocalDateTime对象。我使用ThreeTenBp作为日期/时间库。

字符串 -> 本地日期时间

val actual = LocalDateTime.parse("2016-12-27T08:15:05.674+01:00", 
                                 DateTimeFormatter.ISO_DATE_TIME)
val expected = LocalDateTime.of(2016, 12, 27, 8, 15, 5, 674000000)
assertThat(actual).isEqualTo(expected) // Successful

本地日期时间 -> 字符串

val dateTime = LocalDateTime.of(2016, 12, 27, 8, 15, 5, 674000000)
val actual  = dateTime.format(DateTimeFormatter.ISO_DATE_TIME)
assertThat(actual).isEqualTo("2016-12-27T08:15:05.674+01:00") // Fails

由于某种原因,时区丢失:

预期:<...6-12-27T08:15:05.674[+01:00]"> 但为:<...6-12-27T08:15:05.674[]">
预期:"2016-12- 27T08:15:05.674+01:00"
实际:"2016-12-27T08:15:05.674"

4

1 回答 1

20

LocalDateTime是偏移量/时区不可知类。你需要一OffsetDateTime堂课。

字符串 -> 偏移日期时间

val actual = OffsetDateTime.parse("2016-12-27T08:15:05.674+01:00", DateTimeFormatter.ISO_DATE_TIME)
val expected = OffsetDateTime.of(2016, 12, 27, 8, 15, 5, 674000000, ZoneOffset.of("+01:00"))
assertThat(actual).isEqualTo(expected)

偏移日期时间 -> 字符串

val dateTime = OffsetDateTime.of(2016, 12, 27, 8, 15, 5, 674000000, ZoneOffset.of("+01:00"))
val actual  = dateTime.format(DateTimeFormatter.ISO_DATE_TIME)
assertThat(actual).isEqualTo("2016-12-27T08:15:05.674+01:00")
于 2017-01-15T01:47:03.893 回答