時間/時區出問題 OAO
(顯示為崩潰
1. 系統時間/時區
$ dateWed Oct 15 21:26:57 PDT 2014$ date --utc
Thu Oct 16 04:30:28 UTC 2014
一開始不知為何系統時區被改成 PDT[1],比台灣時區慢了...應該是 16 小時
但時間跟台灣時間一樣
所以 16 小時之內開始的 contest 題目就被看光光惹
用 date 直接改[2]
$ sudo date 1015213214 # 10/15 21:32 2014
Wed Oct 15 21:32:00 PDT 2014好像沒有動...
改成用 UTC 調時間[2]
$ sudo date -u 1015213214
Wed Oct 15 21:32:00 UTC 2014不小心改成 UTC,但還是用台灣時間,所以比實際時間快了 8 小時
更慘的是時區沒動到,是一個奇怪的時間
$ date
Wed Oct 15 14:33:02 PDT 2014
後來查到可以用 dpkg-reconfigure tzdata 改[3]
$ sudo dpkg-reconfigure tzdata
Current default time zone: 'Asia/Taipei'$ date
Local time is now: Thu Oct 16 05:35:45 CST 2014.
Universal Time is now: Wed Oct 15 21:35:45 UTC 2014.
Thu Oct 16 05:35:54 CST 2014愈來愈奇怪了...
發現還少一步,用 ntpdate time.stdtime.gov.tw 校正時間
$ sudo ntpdate time.stdtime.gov.tw
15 Oct 21:36:59 ntpdate[54005]: step time server 118.163.81.61 offset -28761.160063 sec$ date
Wed Oct 15 21:37:02 CST 2014好像對了
不過這時候從 mysql 那邊出來的時間還是不對 orz
進入下一步
2. mysql 時間
系統時間對了接著就懷疑 code 寫爛掉query 長這樣
select * from contest where start_time > NOW()怎麼看都覺得很正常
所以懷疑一下 NOW() 出問題
mysql> select now();
+---------------------+看起來就像是時區的問題
| now() |
+---------------------+
| 2014-10-15 06:57:57 |
+---------------------+
所以就想辦法改時區[4]
首先確認一下沒有殺錯人
mysql> show variables like '%time_zone%';
+------------------+--------+然後就可以安心下刀
| Variable_name | Value |
+------------------+--------+
| system_time_zone | PDT |
| time_zone | SYSTEM |
+------------------+--------+
mysql> set time_zone='+8:00';
看看成果
mysql> show variables like '%time_zone%';
+------------------+--------+mysql> select now();
| Variable_name | Value |
+------------------+--------+
| system_time_zone | PDT |
| time_zone | +08:00 |
+------------------+--------+
+---------------------+結果相當令人滿意
| now() |
+---------------------+
| 2014-10-15 21:59:26 |
+---------------------+
BUT!!!
網頁上的還是不對
所以重開一下 mysql
$ sudo service mysql restart
finally fixed..... (呼~)
3. 追究原因
總而言之就是如果用 mysql 的時間會被弄死[5]MySQL 內可以儲存「日期與時間」的資料型態是 DATETIME 與 TIMESTAMP 兩種,不過 DATETIME 沒有時區觀念,而 TIMESTAMP 只能是 UTC (GMT+0)。我查證過了,OJ 用的不是香蕉是 DATETIME
然後...我也不知道為什麼
懶得想zzz
4. References
[1] http://zh.wikipedia.org/wiki/%E5%A4%AA%E5%B9%B3%E6%B4%8B%E6%97%B6%E5%8C%BA[2] http://wiki.debian.org.hk/w/Set_date_and_time
[3] http://blog.longwin.com.tw/2009/12/ubunut-linux-set-zone-ntp-time-2009/
[4] http://blog.xuite.net/jyoutw/xtech/47098613
[5] http://blog.gslin.org/archives/2014/01/31/4209/mysql-%E8%A3%A1%E5%84%B2%E5%AD%98%E6%99%82%E9%96%93%E7%9A%84%E6%96%B9%E5%BC%8F/
No comments:
Post a Comment