我在 StackOverflow 上的第一個問題。
Delphi Embarcadero 10.3 環境。我想訪問 UTC 時間。無論 DST 在我所在時區的本地計算機上是否處于活動狀態,我都沒有得到正確的 UTC 日期時間。當夏令時處于活動狀態時,它會正確報告 UTC,但是一旦我在 11/6/22 02:00 AM之后進行測驗,結果 UTC 輸出時間就會提前 1 小時。
根據檔案,一個簡單的函式應該給我 UTC 作為輸出,并自動調整本地 DST 偏移量和時區。這是功能:
function UTCNow: TDateTime;
var
UTCnowDateTime: TDateTime;
begin
UTCnowDateTime := TTimezone.Local.ToUniversalTime(Now, True);
Result := UTCnowDateTime;
end;
我通過將當地時間設定為 2022 年 11 月 6 日凌晨 1:59:00 對此進行了測驗。
我呼叫上面的 UTCNow 函式并得到 11/6/2022 和 UTC 時間 5:59:06 AM。然后我等待時間到達凌晨 02:00,我的本地計算機調整為 DST 結束并將本地時間設定為 01:00。
我再次呼叫 UTCNow 函式并得到 11/6/2022 和 UTC 時間 5:00:14 AM。休息一小時!應該是上午 06:00:14。
(注意:我使用 DateTime.UtcNow 運行了一個 VB.net 測驗,它在 DST 更改中正常作業,但這對我沒有幫助......)
有什么提示嗎?
uj5u.com熱心網友回復:
對于 Windows,您可以呼叫 GetSystemTime 以獲取 UTC 時間。只需要將它從 Windows SystemTime 轉換為 TDateTime。
function UTCNow: TDateTime;
var
ASystemTime: TSystemTime;
UTCnowDateTime: TDateTime;
begin
GetSystemTime(ASystemTime);
UTCnowDateTime := SystemTimeToDateTime(ASystemTime);
Result := UTCnowDateTime;
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/509883.html
