gpt4 book ai didi

java - 将 CDT 时间转换为我的本地时间

转载 作者:行者123 更新时间:2023-12-01 10:51:22 25 4
gpt4 key购买 nike

我在理解 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 函数会根据传递的时区来处理它。

另外,有人可以指出这种正确方法的代码吗?我在 CDT 中有一个 yyyyMMddHHmm 格式的时间,我想为此获取 unix 时间戳?

最佳答案

你的程序显示的是下午 3 点的 Unix 时间戳。但下午 3 点的含义因时区而异。您给出了三个不同的时区,因此您将获得三个不同的时间戳。格林尼治标准时间下午 3 点与纽约上午 10 点是同一时间,因此

"201511231000", "GMT-5" and
"201511231500", "GMT"

确实会给出相同的时间戳。

关于java - 将 CDT 时间转换为我的本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869114/

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