[英]does System.currentTimeMillis() return UTC time?
我想以毫秒為單位獲取當前的 UTC 時間。 我搜索了谷歌並得到了一些 System.currentTimeMillis() 確實返回 UTC 時間的答案。 但事實並非如此。 如果我執行以下操作:
long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();
所有三個時間幾乎相同(由於調用而差異以毫秒為單位)。
t1 = 1372060916
t2 = 1372060917
t3 = 1372060918
這次不是UTC時間,而是我的時區時間。 如何在android中獲取當前的UTC時間?
您顯示的所有三行都將給出自 unix 紀元以來的毫秒數,這是一個固定的時間點,不受本地時區的影響。
您說“這次不是 UTC 時間”-我懷疑您實際上診斷錯誤了。 我建議為此使用epochconverter.com 。 例如,在您的示例中:
1372060916 = Mon, 24 Jun 2013 08:01:56 GMT
我們不知道您何時生成該值,但除非它實際上是在 8:01 am UTC,否則這是您的系統時鍾的問題。
System.currentTimeMillis
和Date
本身中的值都不受時區影響。 但是,您應該知道Date.toString()
確實使用了本地時區,這會誤導許多開發人員認為Date
與時區有內在關聯——它不是,它只是一個瞬間,沒有關聯的時間區甚至日歷系統。
我可以確認所有三個調用都可能取決於當地時間,考慮到時代,而不是Date.toString()
或任何類似的方法。 我已經看到它們依賴於運行 Android 2.3 的特定設備的本地時間。 我還沒有用其他設備和安卓版本測試過它們。 在這種情況下,本地時間是手動設置的。
獲得獨立 UTC 時間的唯一可靠方法是使用GPS_PROVIDER
請求位置更新。 從NETWORK_PROVIDER
檢索到的位置的getTime()
值也取決於本地時間。 例如,另一個選項是 ping 返回 UTC 時間戳的服務器。
所以,我做的是以下內容:
public static String getUTCstring(Location location) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String date = sdf.format(new Date(location.getTime()));
// Append the string "UTC" to the date
if(!date.contains("UTC")) {
date += " UTC";
}
return date;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.