【问题标题】:Convert CDT Time to my Local Time将 CDT 时间转换为我的本地时间
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 2016-01-14
    • 2013-01-01
    • 2018-07-27
    • 2021-07-28
    • 2014-07-18
    • 2021-02-04
    相关资源
    最近更新 更多