UTC時刻の文字列からローカル時刻を出力する
SQLite には日付型はないが、 CURRENT_TIMESTAMP で現在時刻を文字列として取得することができる。また、date などの関数で時刻の演算することもできる。
SELECT CURRENT_TIMESTAMP AS now , datetime('now', 'start of month') AS first_day , datetime('now', 'start of month', '+1 month', '-1 day') AS last_day ;
出力は次のようになる。
now => 2013-11-14 21:12:34 first_day => 2013-11-01 00:00:00 last_day => 2013-11-30 23:59:59
ただしここで出力される時刻は世界協定時 UTC に固定されているため、アプリケーション側でローカル時刻に変換する必要がある。
PHP の場合、この変換に PHP 5.2 から用意されている DateTime クラスを使うことができる。下記の例は UTC 時刻の文字列を受け取り、ローカル時刻の文字列を返す。
<?php function formatLocalDatetime($utcstr) { static $UTC, $Local; if (! isset($UTC)) { $UTC = new DateTimeZone('UTC'); $Local = new DateTimeZone(date_default_timezone_get()); } try { $date = new DateTime($utcstr, $UTC); $date->setTimeZone($Local); return $date->format('Y/m/d H:i:s'); } catch (Exception $e) { return ''; } } date_default_timezone_set('Asia/Tokyo'); echo formatLocalDateTime('2013-11-14 21:12:34'); // => 2013-11-15 06:12:34
単に UNIX 時間を取得する場合は $date->getTimestamp() でよい。