CPAN DateTime::TimeZone 好弱雞啊…

由於需要在Perl處理一些TimeZone的工作,考慮過一些系統存在的歷史因素,以及看看CPAN module的最後更新日期,最後選用了DateTime::TimeZone(其實沒得選,本來就在用)。看了一看,最新的release是2009年八月,還不錯嘛。這玩意兒聲稱自己支援Olson TimeZone(其實也只是lookup一個Olson Database而已),好,就看看你有多威。

在這裏我用「Etc/GMT0」來做實驗,不用說,即死。對,不是throw Error,是die。在OlsonDB.pm第155行裏頭可以看得清清楚楚︰假如不支援這個TimeZone的話,他會die

這裏我們清清楚楚的看到兩個問題︰
一、不支援「Etc/GMT0」,我們也可以假定部分其它的Olson TimeZone也不支援。
二、作為library實在不應該die。試想這是Java Library的話,我在Library裏頭有System.exit(0)你會覺得怎麼樣?die是可以catch的,但重點是不應該die

現在看看Catalog.pm。原來那些Olson TimeZone都儲在這裏…在這裏又發現了幾個問題︰
一、Zoneinfo還是放在/usr/share/zoneinfo/比較好吧?
二、很不完整,幾乎全部的ETC TimeZone也沒有,甚至連GMT也沒有!
三、我看了src code,又看了網頁…很驚訝的發現,兩條TimeZone support list竟然是不同的呀~的呀~的呀…

另外,不說我還真不知道,原來有個TimeZone Mideast/Riyadh89 (GMT+03:07),沒錯是GMT+03:07,或者更正確的說是GMT+03:07:04。這個時間是給Muslims用作計算麥加的natural sun time以作朝拜用的。原來如此原來如此。

Leave a Comment

Spam protection by WP Captcha-Free