Java 从unix时间戳获取日期(以GMT为单位)

Java 从unix时间戳获取日期(以GMT为单位),java,date,simpledateformat,gmt,Java,Date,Simpledateformat,Gmt,我编写了以下代码,以从unix时间戳中获取GMT格式的日期 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("G

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

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);
}
此代码在执行时已被删除

Mon May 27 02:57:32 IST 2013 
日期变量中的值和

Sun May 26 21:27:32 GMT 2013

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

日期只是长时间的包装,包含毫秒数

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


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

从概念上讲,这就是问题所在:

//date obtained here is in IST on my system which needs to be converted into GMT.
Date time = new Date(Long.valueOf(unixTimeStamp) * 1000);
日期
没有时区。这是您想要的值。调用
toString()
时,它会将其转换为本地时区,这一事实与它实际表示的值无关。从Unix时代(1970年1月1日,UTC午夜)起,
日期仅为毫秒数。因此,您的整个方法可以是:

private static Date convertToDate(String unixTimeStamp)
{
    return new Date(Long.valueOf(unixTimeStamp) * 1000);
}
您不需要任何类型的格式化程序,因为您并没有真正尝试获取文本表示


如果可以的话,我建议您使用日期/时间工作,顺便说一句,这是一个更干净的API。

它以字符串形式给出结果,我以字符串形式获得结果,但我想要的是结果应该是日期而不是字符串。请参阅上面问题中的回答。