我一直在理解UnixTimestamp独立于Timezone的概念。所以,我的服务器将所有时间戳存储在CDT时区中作为unixTimestamp(正如我所知)。我必须按照本地TimeStamp在我的Android应用程序中以毫秒为单位显示这些时间戳。我被告知,如果我将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的 - >局部。或者Java函数会根据传递的时区来处理它。
此外,有人可以用正确的方式指出代码吗?我有一段时间在CDT中的yyyyMMddHHmm格式,我想为此获得unix时间戳吗?
答案 0 :(得分:1)
您的程序显示的是下午3点的Unix时间戳。但是下午3点意味着根据时区而变化。您已经给出了三个不同的时区,因此您将获得三个不同的时间戳。格林威治标准时间下午3点与纽约时间早上10点相同,所以
"201511231000", "GMT-5" and
"201511231500", "GMT"
确实会给出相同的时间戳。