2013-06-02 68 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對象表示通用時間軸上的一個時刻,並且沒有任何時區。