Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 时区在windows server中工作不正常_Java - Fatal编程技术网

Java 时区在windows server中工作不正常

Java 时区在windows server中工作不正常,java,Java,如果在windows计算机中运行此代码,则其工作正常: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(new Date())); 它显示的日期和时间与时钟相同,但如果在Windows Server上运行,则显示的代码相同,显示的时钟时间为-2小时 我试着将时区设置为 TimeZone timeZone = TimeZone.getTimeZone

如果在windows计算机中运行此代码,则其工作正常:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()));
它显示的日期和时间与时钟相同,但如果在Windows Server上运行,则显示的代码相同,显示的时钟时间为-2小时

我试着将时区设置为

TimeZone timeZone = TimeZone.getTimeZone("Europe/Vienna");
sdf.setTimeZone(timeZone);
Then, it shows same as clock time.

我的疑问是,为什么它在Windows Server中默认不使用时钟时区。

它应该始终使用正在运行的计算机的时区,但在某些情况下,它会根据报告和命令失败。如果您确信您的服务器时区正确,但Java使用不同的时区,则可以从命令行强制选择默认时区:

-Duser.timezone="YOUR_TIME_ZONE_HERE"
或者。您还可以尝试使用Oracle提供的

要查看Java使用的时区,请执行以下操作:

System.out.println(TimeZone.getDefault());

时区设置对计算机看到的时间值没有影响。有关详细信息,请参阅。只要系统时间设置正确(不考虑时区),并且不需要将时间显示为文本或从文本解析时间,java就不会有问题,它的计算也将是正确的。如果确实需要显示/解析时间值,那么设置默认时区是安全的,并且不会影响时间的存储方式,当然Java将使用该时区解析没有明确指定时区的时间文本表示(比如在示例中使用
simpleDataFormat
进行解析,因为格式字符串不包括时区)

至于为什么Java在您的服务器上而不是桌面上有这个问题,它是什么版本的Windows server,服务器上运行的是什么版本的Java?我的猜测是JVM无法明确地识别操作系统版本,因此无法确定如何获取本地时区,因此使用UTC作为备用。请尝试更新java版本至最新版本


另一种可能是,服务器上的时区是按每个用户设置的。请验证在服务器上运行应用程序的用户/进程的时区设置是否正确。

Oracle在该问题上存在一个漏洞:。基本上是因为Java将时区从注册表中拉出。Windows将其保存在HKLocalMachin中e、 这不是客户端时间,而是机器的时间。

在从2003服务器升级到2008服务器后,我遇到了这个问题。Java一直使用GMT时区而不是Windows时区设置。解决方案很简单,请转到Windows控制面板并更改为不同的时区(任何时区都可以),然后把它换回来。我花了几个小时才弄明白,但它很有魅力


我的想法是:这个变化在Java中触发了一些东西,从而纠正了这个问题。

甚至我也尝试过这样做,在命令提示符下,systeminfo | findstr/C:“时区。它显示的时区与时钟i相同,即时区:(UTC+01:00)阿姆斯特丹、柏林、伯尔尼、罗马、斯德哥尔摩、维也纳。但是为了让java代码显示正确的时间,我需要明确地设置时区。这是我面临的问题。非常感谢您的回复,我尝试更改系统时钟设置的时区,但没有效果。我无法更改时间,因为我没有管理员权限。我不想给sp任何帮助通过硬编码或参数指定时区,它必须占用系统时间。因为需要记录日志文件。他们总是根据系统检查时间。我将检查时区更新工具。在我的桌面上,时区设置显示为GMT,但在windows server中,它显示为UTC。对于system.out.println(Timezone.getDefault()),则显示为UTC服务器计算机上的此行显示为默认时区:sun.util.calendar.ZoneInfo[id=“GMT”,偏移量=0,DSTSAVAINGS=0,useDaylight=false,过渡时间=0,lastRule=null].Id是GMT,这可能是个问题吗?它的windows server 2008 R2 standard.java版本是jdk1.5,桌面java版本是6。啊!JDK 1.5是9年前推出的,所以可能不知道windows server 2008。完整的
java-version
输出是什么,包括内部版本号?虽然真的没关系,但你仍然没有任何pr除非转换为文本或从文本转换为文本,否则会出现问题。应用程序如何处理这些问题?非常感谢Alvin。我使用了java 1.6版,它正在工作。非常感谢您的输入。java 6也是windows server的早期版本。但它使用的是java 6版本。