【发布时间】:2016-02-25 10:41:29
【问题描述】:
我一直难以理解 UnixTimestamp 独立于时区的概念。因此,我的服务器将 CDT 时区中的所有时间戳存储为 unixTimestamp(据我所知)。我必须根据我的本地时间戳在我的 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 函数会根据传递的时区来处理它。
另外,有人可以指出正确的代码吗?我有时间在 yyyyMMddHHmm 格式的 CDT 中,我想为此获取 unix Timestamp?
【问题讨论】:
-
你为什么要混合使用旧的 API 和新的 API?一路走下去,用新的
-
oldTime API 和 New One 是什么意思?
-
你使用
TimeZone,它出现在 JSR 310 中;你使用Date,例如,LocalDateTime可用,DateFormatter,DateTimeFormatter可用。
标签: java date datetime unix epoch