简短的答案:您不能。
长话大说:没有“语言环境的正确时区”之类的东西。这仅仅是因为有些国家/地区具有多个时区(例如美国)。时区是一个不同的概念。
无论如何,您正在寻找解决问题的方法。我猜您正在编写Web应用程序,并且看到时区已恢复为服务器默认值。那是典型的情况。双方
Locale.getDefault()并
TimeZone.getDefault()会返回服务器的相关信息。JVM无法知道“适当的”时区。所以你对此能做些什么?
- 您可以将时区信息添加到用户配置文件中(如果有的话),或创建时区组合框(以便用户可以在运行时进行切换)。然后,您可以为
DateFormat
实例分配一个适当的对象,它将自动转换时区。 - 您可以通过Javascript Date Object的getTimezoneOffset()函数从客户端读取 当前 时区偏移,然后以某种方式(AJAX)将其发送到服务器。此方法的问题在于,存在多个具有该偏移量的时区,并且所选时区可能不适用于其他日期。当然,您可以通过轮询时间更改日期附近的数据来猜测时区,但这可能不是您想要的。
- 您可以将未格式化的时间发送给客户端(例如,以ISO 8601日期-时间格式或相对于UTC 的纪元的Unix时间编写),并为您提供Globalize或Dojo格式的日期和时间。
在这三个可能的选择中,我始终选择数字1。通过将时区信息添加到用户个人资料中,您可以确定他/她的首选时区是什么,而不管其当前的Web浏览器是什么,等等。请记住一些用户可能想在访问其他国家时使用您的应用程序…



