gpt4 book ai didi

Java:如何以语言环境敏感的方式显示工作日、月份和日期以及没有年份

转载 作者:行者123 更新时间:2023-11-30 07:46:54 25 4
gpt4 key购买 nike

在我的应用程序中,我需要以区域设置敏感的方式显示日期。因此,“2018 年 5 月 10 日星期四”在 en_US 中应显示为“2018 年 5 月 10 日星期四”,但在 en_GB(英国英语)中应显示为“2018 年 5 月 10 日星期四”。

在大多数情况下,我可以将以下代码风格与 java.time API 类一起使用:

public String toString(ZonedDateTime input) {
DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(FormatStyle.MEDIUM, FormatStyle.SHORT);
return input.format(dateTimeFormatter);
}

private DateTimeFormatter getDateTimeFormatter(FormatStyle dateStyle, FormatStyle timeStyle) {
String pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
dateStyle, timeStyle, IsoChronology.INSTANCE, Locale.getDefault());

return DateTimeFormatter.ofPattern(pattern);
}

在这种情况下,我不指定明确的日期模式,而是指定符号格式样式。

我不确定处理没有满足我需要的标准 FormatStyle 的情况的最佳方法。

一个具体的例子是我需要显示星期几、月份和日期但没有年份。

因此,“2018 年 5 月 10 日星期四”在 en_US 中应显示为“5 月 10 日星期四”,但在 en_GB(英国英语)中应显示为“5 月 10 日星期四”。

关于如何处理这个要求有什么建议吗?

最佳答案

    String formatPattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
FormatStyle.FULL, null, IsoChronology.INSTANCE, loc);
formatPattern = formatPattern.replaceFirst("^.*?([MLdEec].*[MLdEec]).*$", "$1");
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(formatPattern, loc);
System.out.println(LocalDate.now(ZoneId.of("Pacific/Johnston")).format(dateFormatter));

loc 等于 Locale.US 的输出:

Thursday, May 10

还有 Locale.UK(英国):

Thursday, 10 May

工作原理:我从本地化格式模式字符串开始。在我的正则表达式中,我识别与月份 (ML)、月份日期 (d) 和星期几 (Eec)。我保留了从第一个到最后一个这样的字母的子字符串。领先的勉强量词 .*? 确保我得到第一个匹配的字母。如果某些语言环境将年份放在这些想要的元素之间,它最终将被包括在内。

我感觉自己太有创意了。在决定您想要这样的东西之前,请使用您能想到的所有测试示例进行测试。

关于Java:如何以语言环境敏感的方式显示工作日、月份和日期以及没有年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50277395/

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