gpt4 book ai didi

java - 从区域设置获取正确的日期格式和时间格式

转载 作者:太空宇宙 更新时间:2023-11-04 07:05:39 26 4
gpt4 key购买 nike

我想实现以下场景:从我的 JSF 页面获取区域设置。

现在我想将区域设置中的日期格式保存在我的数据库中。
示例:

区域设置=美国
=> 字符串日期格式 = "YYYY-MM-dd"

但是如何从 Locale 获取正确的Dateformat

我应该需要同样的东西:

  • 正确的时间格式
  • 时区

有人可以举个例子吗?我已经看到一个图书馆(jodaTime)但我怎样才能做到这一点呢?

最佳答案

第一句话:对于任何给定的区域设置,通常没有唯一的日期或时间格式,因为您还必须考虑精度问题,即样式。例如,在美国,您可以写出“January”或“Jan”或一个数字(这里至少有两个变体,“01”或“1”)。

问题a)的答案:但是确实有一种方法可以提取给定区域设置的常见模式。这是SimpleDateFormat的方式(JodaTime内部使用相同的方式):

static String getDateFormat(int style, Locale locale) {
DateFormat fmt = DateFormat.getDateInstance(style, locale);

if (fmt instanceof SimpleDateFormat) { // almost always true
return ((SimpleDateFormat) fmt).toPattern();
} else {
throw new UnsupportedOperationException("Cannot get date pattern for: " + locale);
}
}

public static void main(String... args) {
System.out.println(getDateFormat(DateFormat.SHORT, Locale.US);
// Output: M/d/yy
}

问题b)的答案:要获取时间模式非常相似,只需研究java.text.DateFormat的javadoc,特别是方法getTimeInstance(int, Locale)

问题c)的答案:时区概念与本地化无关。例如,美国或俄罗斯有多个时区。相反,至少在概念上,IANA-TZDB 并不排除在一个时区拥有多个语言环境。例如,“Europe/San_Marino”只是“Europe/Rome”的链接/别名,也就是说,不是具有自己数据的独立时区标识符。但至少为了帮助用户选择正确的时区,IANA-TZDB提供了内置于 tzdb 所有发行版中的查找表:

https://github.com/eggert/tz/blob/master/zone.tab

不幸的是,Java 不提供此表的标准 API 访问,甚至新的 JSR-310 也不提供。 ( java.time.*Java 8 中)或 Joda-Time因此,由您自己评估 zone.tab-table 。对于您来说,根据用户的偏好直接从用户那里获取正确的时区可能是更好的方法。例如,在基于 Web 的场景中,JavaScript 提供了提取此信息的解决方案,然后将其发送到服务器,以便您的 Java 程序对其进行处理。看这个SO-answer .

关于java - 从区域设置获取正确的日期格式和时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21434371/

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