我使用TidSNTP得到一個時間服務器和本地時鐘時間之間的調整時間。在Windows上,它做什麼,我希望:德爾福TidSNTP的Android
- 從UTC轉換時間服務器的日期時間爲當地時間
- 從局部時間服務器的日期時間減去我的時鐘的時間
然而,在我的Android設備,不同的東西發生了:
- 服務器的日期時間返回爲UTC時間,不是本地時間
- 釷e調整時間返回爲(UTC * 2)+調整時間的本地偏移量
有沒有其他人遇到過這種情況?建議?
SNTP := TIdSNTP.Create(Self);
try
SNTP.ReceiveTimeout := 5000;
SNTP.Host := 'time.nist.gov';
try
DateTime := SNTP.DateTime;
TimeOffset := SNTP.AdjustmentTime;
SNTPFailed := False;
except
SNTPFailed := True;
end;
SNTP.Active := False;
finally
SNTP.DisposeOf;
SNTP := Nil;
end;
正確的雷米。在Android上下文中,.SyncTime可以調整Android上的時間,但只能在0.14 - 0.17秒之內。 (通過重複的調整和計算檢查).adjustmentTime是一個數字,當我處於GMT + 2時區時,對我而言(-4小時)沒有意義。 – nolaspeaker 2017-10-04 16:29:22
0.14-0.17秒鐘聽起來正確。 [RFC 2030](https://tools.ietf.org/html/rfc2030)(其'TIdSNTP'基於)指出:「*這允許一個簡單的計算,以確定在服務器和客戶端之間的傳播延遲* *通常在幾十毫秒**相對於服務器*的本地時鐘。「至於'AdjustmentTime',它只是返回'FLocalClockOffset'構件,其作爲'FLocalClockOffset計算:=((FReceiveTimestamp - FOriginateTimestamp)+(FTransmitTimestamp - FDestinationTimestamp))/ 2;',根據RFC 2030第5 – 2017-10-04 17:45:04
如果你看到2-6小時的值,然後回到我的評論,也許Indy的'TimeZoneBias()'函數在Android上返回錯誤的值。你是否在我的回答中改變了我的建議?它對原始代碼有什麼影響嗎? – 2017-10-04 17:45:41