关于java:从unix时间戳获取GMT中的日期

Getting date in GMT from unix timestamp

本问题已经有最佳答案,请猛点这里访问。

我编写了以下代码,以便从unix时间戳中获取GMT中的日期

1
2
3
4
5
6
7
8
9
10
11
12
13
private Date converToDate(String unixTimeStamp)
{
    //unix timestamps have GMT time zone.
    DateFormat gmtFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
    gmtFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

    //date obtained here is in IST on my system which needs to be converted into GMT.
    Date time = new Date(Long.valueOf(unixTimeStamp) * 1000);

    String result = gmtFormat.format(time);

    return lineToDate(result, true);
}

这个代码在执行时有

1
Mon May 27 02:57:32 IST 2013

日期变量和值中的值

1
Sun May 26 21:27:32 GMT 2013

在结果变量中,如何直接将结果变量中的值转换为日期变量?


这是概念上的问题:

1
2
//date obtained here is in IST on my system which needs to be converted into GMT.
Date time = new Date(Long.valueOf(unixTimeStamp) * 1000);

A Date没有时区。这是你想要的价值。当你调用toString()它?晃愕谋镜厥鼻飧鍪率涤胨导蚀淼闹滴薰亍W訳nix时代(1970年1月1日,午夜UTC)以来,Date只是一个毫秒。所以你的整个方法可以是:

1
2
3
4
private static Date convertToDate(String unixTimeStamp)
{
    return new Date(Long.valueOf(unixTimeStamp) * 1000);
}

您不需要任何格式化程序,因为您并不是真的想要获得文本表示。

如果可以的话,我会建议你使用Joda Time进行日期/时间工作 - 这是一个更清洁的API。


Date只是long的包装器,包含许多毫秒。

您所看到的是Date对象的默认toString()表示,它使用您的默认时区(IST)将日期转换为可读字符串。如果您希望使用GMT时区将日期表示为字符串,请执行您的操作:使用带有GMT时区的日期格式。

Date对象表示通用时间轴上的一个瞬间,并且没有任何时区。