gpt4 book ai didi

java - 覆盖 DateTimeFormatter 本地化的世纪日期样式解析策略

转载 作者:行者123 更新时间:2023-12-04 10:48:43 29 4
gpt4 key购买 nike

我需要根据语言环境和格式样式动态解析日期字符串。

例如,我有一个阿尔巴尼亚语言环境,它具有模式 yy-MM-dd

我有以下代码可以根据当前的语言环境和格式样式解决此模式

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendLocalized(FormatStyle.SHORT, null)
.toFormatter()
.withLocale(Locale.forLanguageTag("sq-AL"));
TemporalAccessor temporalAccessor = formatter.parseBest("92-07-09", LocalDateTime::from, LocalDate::from, LocalTime::from);
System.out.println(temporalAccessor);

输入字符串被解析为 09/07/2092

但我需要将此日期解析为 09/07/1992

添加 .appendValueReduced 的代码不起作用
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendLocalized(FormatStyle.SHORT, null)
.appendValueReduced(ChronoField.YEAR, 2, 2, LocalDate.now().minusYears(80))
.toFormatter()
.withLocale(Locale.forLanguageTag("sq-AL"));

我已经在 StackOverflow 上搜索了答案,但没有找到任何可以在没有 .appendPattern() 的情况下工作的答案。并基于语言环境和格式样式

提前致谢!

最佳答案

建立在 this answer ,您可以先从输入字符串中提取模式,如下所示:

String shortPattern =
DateTimeFormatterBuilder.getLocalizedDateTimePattern(
FormatStyle.SHORT,
null,
IsoChronology.INSTANCE,
Locale.forLanguageTag("sqi-AL")
);
System.out.println(shortPattern); //y-MM-d

现在,您可以使用具有特定年份说明的格式化程序。该模式现在通过 y 明确给出s 已删除,因为 year 现在由 appendValueReduced 处理:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendOptional(DateTimeFormatter.ofPattern(shortPattern.replaceAll("y","")))
.appendValueReduced(ChronoField.YEAR, 2, 4, LocalDate.now().minusYears(80))
.appendOptional(DateTimeFormatter.ofPattern(shortPattern.replaceAll("y","")))
.toFormatter();

TemporalAccessor temporalAccessor = formatter.parseBest("92-07-09", LocalDate::from, LocalDateTime::from);
System.out.println(temporalAccessor); //1992-07-09
appendOptional的原因是如果语言环境模式末尾有年份,则可能会导致解析错误。例如,您的代码中的语言环境模式( sq-AL )实际上是 d.M.yy .所以我们需要在两端检查年份。

关于java - 覆盖 DateTimeFormatter 本地化的世纪日期样式解析策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59583417/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com