gpt4 book ai didi

java - 是否有可能以适用于 Java 中所有语言环境的方式编写自定义日期格式?

转载 作者:行者123 更新时间:2023-12-02 15:43:58 26 4
gpt4 key购买 nike

我的目标是以如下格式显示日期:

<表类="s-表"><头>国家例子模式<正文>美国1 月 3 日,星期二EEE, LLL d法国三月3 简夫.EEE d LLL

我正在使用 DateTimeFormatter.ofPattern格式化我的日期。

有没有一种方法可以在不为每个语言环境编写模式的情况下实现这一点?

编辑:我将非常具体地说明我的用例:我正在尝试格式化 LocalDate实现这个日期选择器:m3.material.io/components/date-pickers/…

最佳答案

不是作为一种模式,不。例如,一种模式编码顺序 - 不可能有一种模式使得“在法语中”它会在月份日期之后粘贴月份,而“在英语中”它'会被逆转。充其量,单一模式的本地化翻译名称;一个模式可以产生 Tue, Jan 3Mar., janv。 3。这不是您想要的。

您要找的方法是ofLocalizedDate(dateStyle) .这会产生一个“懒惰”的 DTF 实例 - 它没有模式,它只知道“我需要在区域设置 X 中为‘中等标准格式’传递任何信息”,其中 X 是DTF。

没有编码此行为的模式。

for (var locale : List.of(Locale.ENGLISH, Locale.FRENCH)) {
for (var style : FormatStyle.values()) {
var dtf = DateTimeFormatter.ofLocalizedDate(style).withLocale(locale);
System.out.printf("%s %s: %s\n", locale, style, dtf.format(LocalDate.of(2023, 1, 3)));
}
}

结束打印:

en FULL: Tuesday, January 3, 2023
en LONG: January 3, 2023
en MEDIUM: Jan 3, 2023
en SHORT: 1/3/23
fr FULL: mardi 3 janvier 2023
fr LONG: 3 janvier 2023
fr MEDIUM: 3 janv. 2023
fr SHORT: 03/01/2023

这显示了 DTF 的 ofLocalizedDate 变体的动态特性。

请记住,DateTimeFormatter 不是必然基于模式的概念。图案只是制作它们的一种方式。这种方式不允许您通过调用 .withLocale 来更改它们的外观。其他制作 DTF 的方法,例如 .ofLocalizedDate确实允许它。

如果您要将某物存储在数据库中或向用户询问某物,那么您必须做出不同的选择:用户首先选择他们想要“模式”还是“样式”,因此您将其存储(数据库中的枚举列,或用户界面中的单选按钮集),然后根据他们选择的内容,存储样式值(完整、长、中等或短)——再次是用户界面中的单选按钮集或db col 中的枚举,或者存储模式(string/VARCHAR/TEXT/JTextField,类似这些)。根据“样式”,您通过检查“变体”选项(样式或模式)并调用 .ofPattern.ofLocalizedDate 来从此类存储的首选项构造 DTF 实例.当您使用它时,您可能希望原始单选按钮集(“模式”或“样式”)也包含 ISO8601 样式。

注意:DTF 类.getPattern() 方法是有原因的;那是因为并非所有 DTF 实例都有一个。

关于java - 是否有可能以适用于 Java 中所有语言环境的方式编写自定义日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74995307/

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