Java 从区域设置获取正确的日期格式和时间格式
我想实现以下场景: 从我的JSF页面获取区域设置 现在,我想保存数据库中区域设置的日期格式。Java 从区域设置获取正确的日期格式和时间格式,java,locale,jodatime,Java,Locale,Jodatime,我想实现以下场景: 从我的JSF页面获取区域设置 现在,我想保存数据库中区域设置的日期格式。 例如: 地区=美国 =>String dateformat=“YYYY-MM-dd” 但是如何从区域设置获取正确的日期格式 我应该需要同样的东西: 正确的时间格式 时区 谁能举个例子吗? 我已经看到一个库(jodaTime) 但是,我怎样才能做到这一点呢?第一句话:对于任何给定的区域,通常没有唯一的日期或时间格式,因为你还需要考虑例如精度问题,即风格。例如,在美国,你可以写出“一月”或“一月”或一个
例如: 地区=美国
=>
String dateformat=“YYYY-MM-dd”
但是如何从区域设置
获取正确的日期格式
我应该需要同样的东西:
- 正确的时间格式
- 时区
但是,我怎样才能做到这一点呢?
第一句话:对于任何给定的区域,通常没有唯一的日期或时间格式,因为你还需要考虑例如精度问题,即风格。例如,在美国,你可以写出“一月”或“一月”或一个数字(这里至少有两个变体,要么是“01”,要么只是“1”)
对问题a的回答):但是确实有一种方法可以提取给定区域设置的公共模式。这里是SimpleDataFormat
的方法(JodaTime内部使用相同的方法):
对问题b的回答):要获得一个非常相似的时间模式,只需研究java.text.DateFormat的javadoc,特别是方法getTimeInstance(int,Locale)
对问题c的回答):时区概念与本地化无关。例如,美国或俄罗斯有几个时区。反过来,至少在概念上,IANA-TZDB不排除在一个时区中有多个地区。例如,“欧洲/圣马力诺”只是“欧洲/罗马”的一个链接/别名,也就是说,它不是一个拥有自己数据的独立时区标识符。但至少为了帮助用户选择正确的时区,提供了内置于tzdb所有发行版中的查找表:
不幸的是,Java并没有为这个表提供标准的API访问,甚至连新的(in)表也没有,所以要自己评估zone.tab表。这可能是一种更好的方法,可以根据用户的偏好直接从用户那里获取正确的时区。例如,在基于web的场景中,JavaScript提供了提取这些信息的解决方案,然后将其发送到服务器,您的Java程序可以在服务器上处理这些信息。参见此。请注意:您的示例模式“yyy-MM-dd”不是特定于美国的模式,甚至不是特定于ISO的模式。Y代表工作日的年份(分别以周为基础的年份),应该与一年中的一周和一周中的一天结合起来形成一周的日期。你的意思可能是“yyyy-MM-dd”。但这也不是针对美国的。在美国,通常先设置月份信息。
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
}