在網上看到有網友說自己最近在和印度的SP在核對統計數據的過程中,發現統計的數據存在時區的問題。本文主要是就以上問題作出的解決。他給對方提供的接口獲取指定date的統計結果,是按照中國的時區來控制的。慶幸的是在數據庫中存儲的是國際時間戳,因此只需要在接口處確定調用方是哪個時區的即可獲取正確的統計結果信息。
解決方案參考如下,即在simpledateformat對象基礎上需要明確當前需要使用的時區是什么。
SimpleDateFormat.setTimeZone(TimeZone);
//?Java: long?timeMs?=?System.currentTimeMillis(); System.out.println("long?=?"?+?timeMs); //?current?time?zone SimpleDateFormat?default?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm"); System.out.println(default.format(timeMs)); //?+8:00?time?zone SimpleDateFormat?chinaFormat?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm"); chinaFormat.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); System.out.println("GMT+8:00?=?"?+?chinaFormat.format(timeMs)); //?+5:30?time?zone SimpleDateFormat?indiaFormat?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm"); indiaFormat.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); System.out.println("GMT+5:30?=?"?+?indiaFormat.format(timeMs));
使用如上方法其實就可以解決時區問題,由于我當時獲取統計數據是通過小時表獲取的且小時表是一小時一條記錄。而印度時區為GMT+5:30,在當前表結構的基礎上會存在半小時數據偏差的問題,因此為了解決該問題我們修改小時表的統計粒度為半小時。
總結:
該博客只是簡單的說出重點的解決時區的方案,在使用該方案的前提是數據庫中存儲的是國際時間戳!!!
只有基于絕對時間戳的時間存儲,從根本上就沒有時區的問題!!!時區只是一個顯示問題!!!
每天進步一點點~
【推薦課程:MySQL視頻教程】
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END