为什么Java在Windows中选择协调的世界时区时返回GMT-4.5中的日期?
我们在一些Windows XP机器上看到了一个奇怪的问题,涉及“协调世界时”时区。并不是所有的WindowsXP机器都有它,但是在那些有它的机器上,下面是一个简单的Java程序为什么Java在Windows中选择协调的世界时区时返回GMT-4.5中的日期?,java,windows,timezone,utc,Java,Windows,Timezone,Utc,我们在一些Windows XP机器上看到了一个奇怪的问题,涉及“协调世界时”时区。并不是所有的WindowsXP机器都有它,但是在那些有它的机器上,下面是一个简单的Java程序 public class TimeTest { public static void main(String[] args) { System.out.println(java.util.TimeZone.getDefault()); System.out.println(new
public class TimeTest {
public static void main(String[] args) {
System.out.println(java.util.TimeZone.getDefault());
System.out.println(new java.util.Date());
}
}
在JDK 1.6.0_06上打印:
sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null]
Fri Nov 13 05:34:14 VET 2009
sun.util.calendar.ZoneInfo[id=“America/Caracas”,偏移量=-16200000,DSTSaviews=0,useDaylight=false,transitions=5,lastRule=null]
2009年11月13日星期五05:34:14兽医
(即比格林尼治标准时间晚4个半小时)。我应该补充一点,我的总部设在伦敦,从未去过南美洲。:-)
我的问题是:
- Java从哪里获得这个时区?我以为协调世界时应该是GMT的新名字
- 为什么有些Windows机器有这个时区,而其他的没有
java.util.TimeZone.getDefault
,我怀疑您会在机器上看到有问题的VET
如果希望代码使用UTC,则应明确指定。。。最好使用而不是内置的日期
/日历
类
编辑:如果您在同一台机器上安装了.NET 3.5,请尝试这个小程序,看看它认为时区是什么:
using System;
class Test
{
static void Main()
{
Console.WriteLine(TimeZoneInfo.Local.DisplayName);
}
}
我在Unix/Solaris中遇到了同样的问题。date命令在出现类似“date-u 042315232010”的命令时使用Time/Zome变量。如果使用参数-u,comand date将使用一个名为TZ的变量,它将根据TZ中的参数调整GMT时间。要解决这些问题,请使用comand“日期042315232010”和所有已工作的。也许您应该在Java程序中避免使用时区语句。顺便说一句,“日期042315232010”的意思是“2010年4月23日星期五15:23:00 VET”。我体验过爪哇看到了委内瑞拉标准时间(VET)的时区,即使窗口设置为太平洋。这是在一个新克隆的VMWare盒子上。一旦我将时区从Pacific更改为其他时区,保存它,再将其更改回Pacific,保存它,然后重新启动Java应用程序,Java就会识别出正确的时区。通过“选择”,我的意思是在控制面板/日期和时间/时区中选择它,而不是通过编程进行设置。当我在控制面板中将其更改为其他值时,Java似乎改变了其默认时区的概念,但对于这个值,它似乎荒谬地关闭了。好吧,在这种情况下,这很奇怪。所有机器(工作+不工作)都使用相同版本的Java吗?我只发现两台Windows XP机器的控制面板上有UTC时区。两者都使用1.6.0_06。在1.5.0_12上运行相同的代码会产生不同的奇数时区!(ACT=美国/ RioObBrango,GMT-05),而且重新启动没有区别。考虑使用[ java时区更新] [1 ]工具。我猜Java处理时区的方式与操作系统不同。[1] :另见