2015-07-21 125 views
0

我想在本地應用程序中更改本地時區以使用UTC的時區。代替當地時間,我需要得到UTC時間,這與喬達日期時間非常吻合。但問題是,當我在窗口上更改系統時間時,例如在時鐘上減去1小時,UTC時間返回一小時後返回值。所以我認爲UTC時間是根據系統時間計算的。例如:系統時間爲PDT 3:00,UTC顯示爲10:00。當我將系統時間更改爲PDT 4:00時,UTC是11:00。儘管系統時間改變了UTC,但仍應顯示當前UTC時間,而不是基於系統時間。看起來偏移量是根據系統時間計算得到UTC的。在不使用系統時間的情況下在java中獲取UTC

DateTime mypdt = new DateTime(); 
    DateTime myutc = new DateTime(DateTimeZone.UTC); 
    System.out.println("mypdt--> "+mypdt); 
    System.out.println("myutc--> "+myutc); 

輸出是

mypdt--> 2015-07-21T03:00:14.778-07:00 
    myutc--> 2015-07-21T10:00:14.828Z 

我修改了系統時間4:00我的Windows機器上,現在輸出

mypdt--> 2015-07-21T04:00:14.778-07:00 
    myutc--> 2015-07-21T11:00:14.828Z 

但實際UTC仍然是10:00。我如何得到UTC不會使用系統時間,因爲系統時鐘將在DST期間重置,這是我正在嘗試解決的問題。

回答

0

...當我改變系統時間在窗口上,例如在時鐘上減去1小時,UTC時間返回一小時後的值。所以我認爲UTC時間是根據系統時間計算的。

您似乎誤解了一個關鍵點。系統時間僅以UTC記錄。當您在任務欄上看到時鐘或通過應用程序或編程框架獲取當前本地時間時,系統時間爲,從UTC轉換爲到當地時區。

設置計算機的時間時,使用本地時間進行設置,在分配給內部系統時鐘之前,本地時間立即轉換爲UTC。

...因爲系統時鐘將在DST期間重置,這是我正在嘗試解決的問題。

不,它不會。系統時間會正常打印。您始終可以從系統獲取UTC時間,而不用擔心它會因爲DST更改而被更改。

換句話說,在未來DST轉換時鐘將滴答着如下:

UTC     Pacific 
2015-11-01T08:59:58Z 2015-11-01T01:59:58-07:00 
2015-11-01T08:59:59Z 2015-11-01T01:59:59-07:00 
2015-11-01T09:00:00Z 2015-11-01T01:00:00-08:00 
2015-11-01T09:00:01Z 2015-11-01T01:00:01-08:00 

注意,UTC時間並沒有改變,只是本地時間做了。還要注意的是,當地的偏移量發生變化,哪些Windows在HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation

當然寫入ActiveTimeBias註冊表值,系統時間仍然可以修改,由用戶,由OS校正時鐘漂移時,或通過NTP同步。但是您不必擔心DST修改。

您可能還想知道BIOS。 Windows確實使用本地時間寫入BIOS,但啓動時會讀取該值並轉換爲UTC並跟蹤UTC。它還可以在設置當地時間或者DST啓動時回寫BIOS。這對大多數程序都是透明的。

0

雖然系統時間已經改變UTC應該仍然顯示當前UTC時間而不是基於sys時間。

爲什麼要這樣呢? PDT是一個相對於UTC具有特定偏移量(-7)的時區。因此,如果您將當地時間從3點PDT更改爲4點PDT,UTC自然會隨之改變。

如果您的目標是在不更改即時的情況下更改本地時間,則必須修改時區(例如更改爲PST)或使用LocalDateTime(不包含時區)。

+0

是的,我同意。但我需要有一個標準時間,不會根據系統時間或本地時間或DST進行更改。我的應用程序應該依靠這個標準時間進行計算。可能嗎? – ASB

+0

@ASB。你可以從外部來源獲得時間(見Tony Vu的回答)。但比你的應用程序將取決於互聯網連接。但除此之外,沒有。 Joda時間API用於表示日期和時間,並用它們進行計算,而不是用於獲取系統獨立時間。 – Hoopje

1

如果你想獲得UTC時間無關的系統時間,那麼很可能你需要通過API從外部源檢索它,也許這 http://www.timeapi.org/或本https://developers.google.com/maps/documentation/timezone/intro

+0

@ Tony Vu。這些外部來源是否可靠?讓你或其他人使用它沒有任何問題。我有一個關鍵的應用程序,它進行基於時間的計算,我希望它在DST回退/前進過程中沒有任何問題地工作。任何幫助感謝! – ASB

+0

我曾嘗試Google時區API(用於其他目的,不檢索UTC時間)。在可靠性方面,我真的不能評論。 –

相關問題