Java UTCタイムスタンプのピット

816 ワード

Java UTCタイムスタンプのピット
プロジェクトでは、UTCのタイムスタンプをサーバに渡す必要がある場所があります.ネットワーク上のコードの大部分は次のように変換されます.
//1、      :
java.util.Calendar cal = java.util.Calendar.getInstance();
//2、       :
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
//3、      :
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
//4、            ,     UTC  :
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
//  ,      cal.get(int x) cal.getTimeInMillis()          UTC    。

実際にcal.gettimeInMillis()から取り出されたミリ秒数は間違っており、異なるタイムゾーンを設定すると、この方法で取り出された値は異なる.正しい方法は
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.getTimeInMillis();

gettimeInMillisは実際にutcミリ秒数を取っているので、タイムゾーンとは関係ありません
参考資料:Java Timezone why different timezone give same value in millisec