gpt4 book ai didi

java - 从当前语言环境中检索日期格式模式

转载 作者:行者123 更新时间:2023-11-29 08:21:10 25 4
gpt4 key购买 nike

我想检索当前的日期格式。未格式化日期,我需要的是 MM/dd/yyyydd/MM/yyyy 等格式,具体取决于当前的区域设置。我有一个验证,检查用户是否从根据他的国家/地区调整的输入中输入了正确的日期。

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
String format = ((SimpleDateFormat)dateFormat).toPattern();
System.out.println(format); // M/d/yy

正如你在上面看到的输出与我希望看到的不同,我不明白为什么它返回这种格式而不是 MM/dd/yyyy 在那种情况下,任何想法如何我检索当前语言环境的模式?

最佳答案

tl;dr

LocalDate.parse( 
input ,
DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT )
.withLocale( Locale.sytemDefault() )
)
catch ( DateTimeParseException e ) { … }

避免遗留日期时间类

首先,您使用的是多年前 JSR 310 中定义的 java.time 类已经过时的糟糕类。

解析一下

I've a validation that checks if the user entered correct date from the input that is adjusted to his country.

您不需要事先知道格式。如果您想查看用户输入的数据是否符合当前默认 Locale 预期的格式,只需尝试解析即可。如果解析失败,您就知道输入不正确。

DateTimeFormatter类可以自动确定适合特定语言环境的本地化格式。

Locale locale = Locale.sytemDefault() ;   
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( locale ) ;
try
{
LocalDate localDate = LocalDate.parse( input , f ) ;
} catch ( DateTimeParseException e )
{
… handle the situation of faulty input
}

实际上,.withLocale 调用在这里是多余的。如果您不指定语言环境,则隐式应用 JVM 当前的默认 Locale。我把代码写得很清楚,我也建议你这样做,以使我们的意图清晰明了。

备选方案

有人评论:

So you're claiming that in some locales, the built-in formats are incorrect?

您应该明白,本地化是一个复杂的课题。即使在特定文化中,对于什么约定是合适的,意见也可能不同。

请注意,在 Java 版本 9 中,至少那些使用 OpenJDK 的实现,switched the source本地化细节。 OpenJDK 现在使用 Unicode ConsortiumCommon Locale Data Repository (CLDR) .因此,某些行为和格式可能与早期版本中的有所不同。

最重要的是,惯例会随着时间的推移而改变和发展。

结果是:考虑询问用户他们喜欢什么格式。提供一个列表供您选择。将他们想要的格式存储为首选项设置。

关于java - 从当前语言环境中检索日期格式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58105409/

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