現在のUTC時間をミリ秒単位で取得したい。私はグーグルを検索し、System.currentTimeMillis()がUTC時間を返すという回答を得ました。しかし、そうではありません。次の場合:
long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();
3つの時間はすべてほぼ同じです(呼び出しによる差はミリ秒単位です)。
t1 = 1372060916
t2 = 1372060917
t3 = 1372060918
この時間はUTC時間ではなく、これは私のタイムゾーン時間です。 Androidで現在のUTC時間を取得するにはどうすればよいですか?
表示した3行はすべて、Unixエポック以降のミリ秒数を示します。これは固定時間であり、ローカルタイムゾーンの影響を受けません。
あなたは「この時間はUTC時間ではありません」と言う-あなたは実際にそれを間違って診断したと思う。これには epochconverter.com を使用することをお勧めします。たとえば、あなたの例では:
1372060916 = Mon, 24 Jun 2013 08:01:56 GMT
その値をいつ生成したかはわかりませんが、UTC 8:01 amに実際にでない限り、システムクロックに問題があります。
System.currentTimeMillis
もDate
自体の値も、タイムゾーンの影響を受けません。ただし、Date.toString()
doesはローカルタイムゾーンを使用するため、多くの開発者がDate
本質的にタイムゾーンに関連付けられています-それは、タイムゾーンやカレンダーシステムさえ関連付けられていない、ただの瞬間です。
Date.toString()
または同様の方法ではなく、エポックを考慮して、3つの呼び出しすべてcouldがローカル時間に依存していることを確認できます。 Android 2.3を実行している特定のデバイスのローカル時間に依存するのを見てきました。他のデバイスやAndroidバージョンではテストしていません。この場合、現地時間は手動で設定されました。
独立したUTC時間を取得する唯一の信頼できる方法は、GPS_PROVIDER
を使用して位置の更新を要求することです。 NETWORK_PROVIDER
から取得した場所のgetTime()
値も現地時間に依存します。別のオプションは、たとえば、UTCタイムスタンプを返すサーバーへのpingです。
だから、私がやっていることは次のとおりです:
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;
}