2012-05-11 43 views
0

我有一個運行在美國服務器上的Java應用程序。我的應用程序有一個方法,它發現本地時間和從數據庫中提取的另一個時間戳值之間的差異,我需要檢查這個差異是否大於86400秒(1天)。我的問題在於,服務器正在關注GMT我無法找到以毫秒爲單位的本地時間。我試圖找到美國時間與格林尼治標準時間之間的偏移,然後從System.currentTimeMillis的(減去)找到在美國當地時間,與下面的代碼服務器GMT時間而不是本地時間

int Offset_inmillis = Calendar.getInstance().getTimeZone().getRawOffset(); 
int DSTSavings_inmillis = Calendar.getInstance().getTimeZone().getDSTSavings(); 
long localtime_inmillis = System.currentTimeMillis() + DSTSavings_inmillis + Offset_inmillis; 

的幫助,但因爲服務器正在GMT考慮到上述代碼再次以毫秒爲單位給出GMT時間值(Offset_inmillis,DSTSavings_inmillis值在上面的代碼中爲0)。我可以通過減去偏移量(硬編碼代碼中的偏移值)來提供解決方法,但是我不想這樣做,因爲它不關心夏令時,並且代碼在其中的另一個服務器上掛起時不起作用不同的時區。

我需要解決方案,其代碼適用於所有時區。爲此,我需要解決方案來查找服務器的本地時間(以毫秒爲單位)(但在本例中,服務器在GMT時間之後)。誰能幫忙?

回答

1

要了解這是從數據庫

// Change 'America/New_York' depending on the local timezone of your server 
TimeZone tz = TimeZone.getTimeZone("America/New_York"); 
// Gives the offset of your server timezone from the GMT 
long tzoffset = tz.getOffset(Calendar.getInstance().getTimeInMillis()); 

BTW獲取本地時間與另一個時間戳值之間的差異,理想的數據庫時間戳應該是GMT以及

+0

以上有錯誤。請檢查 –

+0

更改錯字 – Chandra

+0

我懷疑這是否會在不遵守夏令時返回不同的值。目前,它返回正確的值。謝啦! –

0

您可以使用java.util.TimeZone中的類來實現this.There是一個小例子,在這裏這樣的:

http://www.roseindia.net/java/example/java/util/TimeZones.shtml 

希望這會幫助你。

+0

我在代碼中使用的時區。問題不在於此。 GMT之後的服務器是主要問題 –

相關問題