我有这个奇怪的问题,当我创建了一个语言环境日历,时区只是恢复到一个地方
public void start(Locale locale){
String s = locale.getDisplayName();
System.err.println(s);
Calendar c = new GregorianCalendar(locale);
System.err.println(c.getTimeZone());
}
这是输出:
español (Argentina)
sun.util.calendar.ZoneInfo[id="Europe/Bucharest", //etc more useless date here....
我怎样才能从一个特定的区域设置适当的时间?
答案很简单:你不能。
长的答案:有没有这样的事情“为区域设置正确的时区”。 这只是因为有有不止一个时区(例如美国)的少数几个国家。 时区是不同的概念。
无论如何,你正在寻找解决您的问题。 我猜你正在编写一个Web应用程序,你看到时区恢复到服务器的默认。 这是一个典型的情况。 无论Locale.getDefault()
和TimeZone.getDefault()
将返回服务器的相关信息。 JVM有没有办法知道“正确”的时区的方式。 所以你对此能做些什么?
- 您可以时区信息添加到用户配置文件(如果有的话),或者创建一个时区组合框(以便用户可以在运行时切换)。 然后,你可以指定一个合适的对象,以
DateFormat
实例,它会自动转换时区。 - 您可以读取当前时区通过JavaScript Date对象的从客户端偏移使用getTimezoneOffset()函数并以某种方式(AJAX)将其发送到服务器。 用这种方法的问题是,有与偏移几个时区,并选择时区可能不适合其他日期。 当然你也可以通过查询猜测时区时间周围的更改日期的数据,但是这可能不是你想要做什么。
- 您可以将未格式化的时间到客户端(例如写为ISO 8601日期时间格式或作为Unix时间划时代的有关UTC),并具有全球化或道场格式的日期和时间为您服务。
在这些三种可能的选择,我总是选择号码1.通过将时区信息的用户配置文件,你肯定知道他/她的首选时区是什么,无论其当前的网页浏览器等。请记住,有些用户可能想使用你的应用程序在访问其他国家?