1

我有一个要求,如果 ISO 日期时间没有指定区域偏移量,我应该假设欧洲/布拉迪斯拉发的当前偏移量。

基本上"2020-03-26T22:47:32.497" -> "2020-03-26T22:47:32.497+01:00"

特长; 如果有,则解析时区ID,但如果不存在,则默认为特定的

我现在拥有的

private val isoDateTimeParser = DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
    .parseDefaulting(ChronoField...?)
    .toFormatter()

显然它不起作用。甚至可能吗?我应该只有 2 个格式化程序(一个有 tz,一个没有)然后一个接一个地尝试吗?

4

1 回答 1

1

将“覆盖区域”添加到格式化程序withZone

private val isoDateTimeParser = DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_DATE_TIME)
    .toFormatter()
    .withZone(/*whatever*/)

从文档

如果已经直接从文本中解析了一个区域,可能是因为使用了 DateTimeFormatterBuilder.appendZoneId(),那么这个覆盖区域没有任何作用


顺便说一句,格式化程序很少有任何理由成为实例变量。它应该是静态的。鉴于它是不可变的,因此是一个常数,它也应该是大写的。

private static final ISO_DATE_TIME_PARSER = ...
于 2020-03-26T22:26:55.747 回答