Java UTC時(shí)間戳的坑
項(xiàng)目中有個(gè)地方需要取到UTC的時(shí)間戳傳給Server,找到網(wǎng)絡(luò)上大部分的代碼如下轉(zhuǎn)換:
//1、取得本地時(shí)間:
java.util.Calendar cal = java.util.Calendar.getInstance();
//2屿脐、取得時(shí)間偏移量:
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
//3榄攀、取得夏令時(shí)差:
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
//4绊序、從本地時(shí)間里扣除這些差量雷厂,即可以取得UTC時(shí)間:
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
//之后,您再通過(guò)調(diào)用cal.get(int x)或cal.getTimeInMillis()方法所取得的時(shí)間即是UTC標(biāo)準(zhǔn)時(shí)間喇伯。
實(shí)際上從cal.getTimeInMillis()取出來(lái)的毫秒數(shù)是不對(duì)的俯抖,當(dāng)設(shè)置不同時(shí)區(qū)時(shí),用這個(gè)方法取到的值是不同的凑阶。正確的方法應(yīng)該是
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.getTimeInMillis();
getTimeInMillis實(shí)際上已經(jīng)是取utc毫秒數(shù)了猿规,和時(shí)區(qū)沒(méi)關(guān)系
參考資料:Java Timezone why different timezone give same value in millisec