将CDT时间转换为我当地时间

时间:2015-11-23 10:45:12

标签: java date datetime unix epoch

我一直在理解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时间戳吗?

1 个答案:

答案 0 :(得分:1)

您的程序显示的是下午3点的Unix时间戳。但是下午3点意味着根据时区而变化。您已经给出了三个不同的时区,因此您将获得三个不同的时间戳。格林威治标准时间下午3点与纽约时间早上10点相同,所以

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

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