如何将LocalDateTime对象转换为包括时区的ISO字符串?

JJD*_*JJD 4 datetime-format kotlin threetenbp

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

字符串-> LocalDateTime

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
Run Code Online (Sandbox Code Playgroud)

LocalDateTime->字符串

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
Run Code Online (Sandbox Code Playgroud)

由于某些原因,缺少时区:

预期:<... 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“

use*_*814 5

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

字符串-> 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)
Run Code Online (Sandbox Code Playgroud)

OffsetDateTime->字符串

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")
Run Code Online (Sandbox Code Playgroud)