gpt4 book ai didi

java - 日期在美国服务器中返回错误的年份

转载 作者:行者123 更新时间:2023-12-01 06:39:34 25 4
gpt4 key购买 nike

我正在英国开发代码,我正在格式化一个在英国工作正常的日期字段,当我将代码部署到美国的服务器上时,日期的年份错误了一年。这是代码

public static void main(String args[]) {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String dateStr = sdf.format(1293840000000L);
System.out.println(dateStr);
}

在英国本地的 Windows 机器上,此代码正确输出:

2011-01-01T00:00:00Z

在美国服务器上的 Linux 机器上,相同的代码输出

2010-12-31T18:00:00Z

一定是某种时区问题?

最佳答案

您的模式以硬编码的 'Z' 结尾,这会误导您认为它是 UTC,但实际上不是。如果您使用实时时区:

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z");

(Z 周围没有引号)您会看到差异只是时区偏移。

下面是一个重现该问题的示例,这是由于 SimpleDateFormat 使用默认时区造成的:

Date dt = new Date(1293840000000L);

TimeZone.setDefault(TimeZone.getTimeZone("America/Chicago"));
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z");
String dateStr = sdf.format(dt);
System.out.println(dateStr); //prints 2010-12-31T18:00:00 -0600

TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z");
dateStr = sdf.format(dt);
System.out.println(dateStr); //prints 2011-01-01T00:00:00 +0000

关于java - 日期在美国服务器中返回错误的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17028579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com