|
|
1
8
这
我不得不这样做,因为第三方库假设默认时区,而我们没有源代码。这很混乱,因为这会改变日志时区,但我们不想在不同的时间登录。处理此问题的正确方法是在向最终用户公开的任何时间值中使用特定的时区。 |
|
|
2
8
答案是你不能
便携式
行为是 在Sun Javadocs中。它适用于Java 6和5(见上文),但不能保证它适用于较旧或较新的Sun JRE。然而,如果Sun决定更改/恢复默认时区的“全局”模型,我会非常惊讶。它会破坏太多现有的应用程序,而且全局变量也很糟糕。 |
|
|
3
7
|
|
|
4
3
在JDK 6中,Sun/Oracle更改了时区的实现。在JDK 5.0中,setDefault总是在线程局部变量中设置时区,而不是跨JVM设置时区,这导致了一些问题。Sun承认这是一个错误,并在JDK 1.6中进行了修复。
在JDK 1.6之后(我检查了JDK 1.6和JDK 1.7的源代码),如果JVM没有使用安全管理器启动(或者没有设置
这是我的测试程序。 --策略文件test.Policy
--JVM启动参数 |
|
|
5
0
看看 SimpleTimeZone 。您可以基于时区ID创建实例,并使用该ID显示使用该时区的日期/时间。如果需要,可以从特定于项目的配置文件中读取该ID。 |
|
|
6
0
我还研究了TimeZone的Java源代码,我找到了一种方法,通过注入JavaAWTAccess接口的自定义实现,将动态时区作为所有调用者的默认时区返回。这可以通过查看Thread类加载器来实现,并从中确定实际的webapp上下文,然后根据一些webapp名称到时区的映射来适当地处理它。
|
|
|
7
0
|
|
|
8
0
从'21更新的答案: 如今,每个JVM只应运行一个应用程序,并在系统属性中设置TZ。 2009年的过时答案: |
|
|
9
0
|