Kituraを使ってSwiftのサンプルを作ってデータベースと連携させていたのですが、ふと、「そういえば日時はJSTにして返したいよな」と思い、NSDateFormatterを使ったのですが、なぜか上手くいかない・・・。
かなりハマったのですが、これはLinux版のバグかもしれません。
NSDateFormatter
NSDateFormatterというのはSwiftの、というよりはもともとiOSやMacOSXのFoundationフレームワーク内の日付を整形して文字列にしたり逆に整形済みの文字列を日付にしたりといった相互変換を行うためのクラスです。
これを使って、以下のようなコードを書きました。
結果
Macだと
Tokyo time :2016-02-29 23:47:18 GMT time :2016-02-29 14:47:18
のようになるのに対して、Linux版は...
Tokyo time :2016-02-29 14:47:37 GMT time :2016-02-29 14:47:37
タイムゾーンが全く反映されていない!!
NSTimeZoneが悪いのか?
NSTimeZoneが犯人なのかな?と思ってNSTimeZoneのdescriptionをprintすると・・・
{name = Asia/Tokyo; abbreviation = JST; GMT offset = 32400; is DST = false}
GMT offset = 32400 とか出ているので、多分問題なし。けど、色々なイニシャライザが未実装なのでこちらも微妙・・・。
対策
MacかLinuxかの分岐をつけて、MacならTimeZoneを設定、Linuxなら強引にNSDateの値をずらす、などの対策が要りそうです。。
ちなみに、IBMのSwift sandboxだと上のコードは日付が何も表示されませんw
どうやら、使っているバージョンのswiftに不具合があって、dateFormatプロパティが死んでいる模様。。