我在理解UnixTimestamp独立于时区的概念时遇到了麻烦。有人告诉我,如果我将CDT时间戳转换为Unix,然后根据我的本地时区显示它,它就会工作。因此,我编写了一个函数,如下所示,它返回一个unix时间戳:
public static long convertToUnixTSInMillisec(String yyyymmddFormat, String timeZone) { //GMT-5 is Timezone for CDT
long unixTS = 0;
DateFormat dfm = new SimpleDateFormat("yyyyMMddHHmm");
dfm.setTimeZone(TimeZone.getTimeZone(timeZone));//Specify your timezone
try {
unixTS = dfm.parse(yyyymmddFormat).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return unixTS;
}但是,当我使用不同的时区调用上面的函数时,它返回不同的Unix时间戳,这不是我所期望的。我期待着相同的时间戳和Java函数来处理它。
System.out.println(convertToUnixTSInMillisec("201511231500", TimeZone.getDefault().getID()));
System.out.println(convertToUnixTSInMillisec("201511231500", "GMT-5"));
System.out.println(convertToUnixTSInMillisec("201511231500", "GMT"));为什么会发生这种情况?如果我想把时间转换成CDT-->Unix-->Local,我是不是应该先转换成GMT,然后再转换成Unix?CDT-->GMT-->Unix-->Local。或者Java函数会按照传递的时区来处理它。
另外,有人能用这种正确的方式指出代码吗?我有一个时间在yyyyMMddHHmm格式的CDT,我想得到unix的时间戳?
发布于 2015-11-23 19:57:24
您的程序显示的是下午3点的Unix时间戳。但是3pm的意思因时区不同而不同。您已经提供了三个不同的时区,因此您将获得三个不同的时间戳。在格林尼治时间下午3点和纽约上午10点是同一时间,所以
"201511231000", "GMT-5" and
"201511231500", "GMT"确实会给出相同的时间戳。
https://stackoverflow.com/questions/33869114
复制相似问题