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

我试图将日期/时间字符串来回转换成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 

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 

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

预计:<… 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”

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) 

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")