在網路上看到有網友說自己最近在和印度的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影片教學】
以上是對於MySQL在保存時間資訊上的建議的詳細內容。更多資訊請關注PHP中文網其他相關文章!