2010-08-17 172 views
0

我想從服務器UTC時間獲取當地時間。我從服務器獲得UTC時間 - 我希望爲每款Android手機做好準備,無論是在加州還是在中國。將UTC時間轉換爲電話本地時間

這是我現在使用的代碼 - 但它鼻涕工作。

我從服務器獲取的時間是

"2010-08-17 19:41:13.0" 

我用得到的差值(單位:秒)的代碼如下:

public static long getSecondsDifference(Timestamp timeStamp) { 
    final Calendar calendar = Calendar.getInstance(Locale.getDefault()); 

    int refrenceOffset = TimeZone.getDefault().getOffset(timeStamp.getTime()); 

    final long referenceSeconds = (timeStamp.getTime() + refrenceOffset)/1000; 
    final long currentTimeSeconds = (calendar.getTimeInMillis())/1000; 

    final long differenceMinutes = (currentTimeSeconds - referenceSeconds)/60; 

    return differenceMinutes; 
} 

時間戳是從Java。 sql.timestamp包。

我在哪裏

現在的時間是11:50 AM - 並且該方法返回給定服務器時間-53分鐘前(如此明顯做錯事:))

+0

我會檢查每一步的每個值。有些東西不是你認爲的。 – John 2010-08-17 19:39:18

回答

1

它曾與白天做儲蓄。自從我居住的PDT(太平洋夏令時間)以來 - 我必須賠償。

public static long getSecondsDifference(Timestamp timeStamp) { 
    final Calendar calendar = Calendar.getInstance(Locale.getDefault()); 

    int offset = TimeZone.getDefault().getOffset(timeStamp.getTime()); 

    if (TimeZone.getDefault().inDaylightTime(Calendar.getInstance().getTime())) { 
     offset = offset - TimeZone.getDefault().getDSTSavings(); 
    } 
    final long referenceSeconds = (timeStamp.getTime() + offset)/1000; 

    final long currentTimeSeconds = (calendar.getTimeInMillis())/1000; 

    final long differenceSeconds = (currentTimeSeconds - referenceSeconds); 

    return differenceSeconds; 
}