2013-06-02 33 views
2

我写了下面的代码从unix时间戳获得GMT日期获得在GMT日期从Unix时间戳

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 

在结果变量,我如何直接获取结果变量的值到日期变量可以吗?

+0

这给出了字符串中的结果,我米字符串获取它,但我想要的是,结果应该是一个日期不是字符串。 –

+0

请参阅上面问题中的回复http://stackoverflow.com/a/2453820/2235132。 – devnull

回答

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); 

一个Date一个时区。这是你想要的价值。当您致电toString()时,它将其转换为您当地的时区与其实际代表的价值无关。 A Date只是自Unix纪元(1970年1月1日,午夜UTC)以来的毫秒数。所以,你的整个方法可以是:

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

你不需要任何一种格式化的,因为你没有真正试图获得一个文本表示。

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

2

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

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

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