DateTimeFormatterBuilder具有默认区域ID? [重复]

问题描述 投票:0回答:2

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

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

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

我现在拥有的

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

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

java java-time date-parsing jsr310
2个回答

0
投票

使用withZone向格式化程序添加“替代区域”

withZone

来自文档

如果直接从文本中解析了区域,也许是因为使用DateTimeFormatterBuilder.appendZoneId(),然后进行此覆盖区域无效


顺便说一下,格式化程序几乎没有理由成为实例变量。它应该是静态的。鉴于它是不可变的,因此是一个常量,它也应该是大写。

private val isoDateTimeParser = DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_DATE_TIME)
    .toFormatter()
    .withZone(/*whatever*/)
© www.soinside.com 2019 - 2024. All rights reserved.