这是我的第一个问题,但却是一个重要的问题(也是一个奇怪的问题)。对不起,如果我的英语不好,我不经常说。
当我想要获取 Calendar.getInstance() 时,我遇到了一个大问题。我正在使用 JBoss 3.2.5,我正在创建一个 .war 应用程序、Java 1.6.0.25(Java 1.7 遇到同样的问题)和 Windows 7 Enterprise。我使用 Java Web Start 执行应用程序。
我的应用程序代码(出现问题的地方)在这里:
public static void main(final String args[]) {
Calendar c = Calendar.getInstance();
System.out.println(" >>>>>>>>>>>>>>>>>>> " + c.getTimeZone().getDisplayName());
System.out.println(" >>>>>>>>>>>>>>>>>>> " + c.getTimeZone().getID());
System.out.println(" >>>>>>>>>>>>>>>>>>> " + c.getTime());
System.out.println(" ------------------- ");
...
如您所见,问题在于应用程序何时启动。
当我在控制面板(Java->常规->临时文件->配置->在我的计算机上保留临时文件)中启用 Java 缓存时,我得到以下结果:
>>>>>>>>>>>>>>>>>>> Hora de Europa Central
>>>>>>>>>>>>>>>>>>> Europe/Paris
>>>>>>>>>>>>>>>>>>> Thu May 16 16:37:18 CEST 2013
但是当我禁用 Java 缓存时,结果完全不同,我得到了这个:
>>>>>>>>>>>>>>>>>>> Hora Universal Coordinada
>>>>>>>>>>>>>>>>>>> UTC
>>>>>>>>>>>>>>>>>>> Thu May 16 14:41:48 UTC 2013
这就是我的问题,我总是需要相同的结果,第一个,因为我需要 GMT+1,而且,就像我们在夏天一样,我们有一个额外的 +1,然后我们有 GMT+2。
如果我调用下一句,我总是得到一个正确的时区:
System.getProperty("user.timezone"));
这个:
Europe/Paris
我不知道如何解决这个问题,我尝试投射 TimeZones、Calendars、DateFormats 但我无法获得正确的时间,我总是得到一个 UTC 时间。
Java 1.7 的行为不同,我启用了缓存,但如果是干净的,它的行为很糟糕,但只有第一次,第二次工作正常(除非你再次清理 Java 缓存)。
任何想法来解决这个问题???
非常感谢!