【发布时间】:2012-12-14 01:33:30
【问题描述】:
我正在按照下面的代码在指定的 dateTime 上使用指定的时区创建一个 Date 对象。
注意:我没有为 jvm 设置任何时区;但是用不同的 linux 服务器时区测试这段代码。
String date = "20121225 10:00:00";
String timeZoneId = "Asia/Calcutta";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z");
//This date object is given time and given timezone
java.util.Date parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(false, TimeZone.SHORT));
if (timeZone.inDaylightTime(parsedDate)) {
// We need to re-parse because we don't know if the date
// is DST until it is parsed...
parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(true, TimeZone.SHORT));
}
现在 parsedDate 对象的行为有所不同
当我的 jvm 服务器在 IST 中运行时
parsedDate.getTime() -- 1356409800000
parsedDate.toString() -- 2012 年 12 月 25 日星期二 10:00:00 IST
在 GMT --- 12/25/2012 04:30:00 GMT
当我的 jvm 服务器在 EST 中运行时
parsedDate.getTime() -- 1356422400000
parsedDate.toString() -- 2012 年 12 月 25 日星期二 03:00:00 EST
格林威治标准时间 --- 2012 年 12 月 25 日 08:00:00 格林威治标准时间
我的两个系统时间是同步的
2012 年 12 月 24 日星期一 10:30:04 EST
2012 年 12 月 24 日星期一 21:00:48 IST
我期望在两台机器上我应该得到相同的 GMT 时间。
这里出了什么问题?
【问题讨论】:
-
我们能看到完整的代码吗?您的代码现在没有显示任何 System.outs
-
只有当它们的 GMT 时间相同时,机器才会同步。尝试在两台机器上使用 System.currentTimeMillis()。无论时区设置如何,这将为您提供 GMT 时间。如果这些不一样,您必须修复它。
-
BTW 三字母代码不是唯一的。美国、欧洲、巴西和澳大利亚都有 EST。
-
@PeterLawrey 实际上它不是两台不同的机器。我刚刚更改了单机的时区并重新启动了我的应用程序。
-
因此,如果您使用 setTimeZone 设置 timezoen 而不是将其附加到 String 并尝试将其解析回来,它应该忽略您的默认时区并使用您给它的任何内容。
标签: java date timezone simpledateformat