備忘録:SQLite で timestamp と iso8601 を相互変換する定型句
忘れがちなので。ツッコミ歓迎です。 より詳しくはSQLite のマニュアルへ
timestamp(unixepoch) から iso8601 へ(現地時間で)
-- ts に timestamp が入っているとして。 select datetime(ts, 'unixepoch', 'localtime'); select datetime(0, 'unixepoch', 'localtime'); -- ex. 1970-01-01 09:00:00 -- datetime と等価な strftime select strftime('%Y-%m-%d %H:%M:%S', ts, 'unixepoch', 'localtime');
utc で良い時は 'localtime'
は省略できる
iso8601 から timestamp へ
-- timezone まで書いてあった場合 select strftime('%s', '1970-01-01 09:00:00 +09:00'); -- 0 -- timezone 書いてない時に、utc に戻すには select strftime('%s', '1970-01-01 09:00:00', 'utc'); -- 0
roundtrip
% sqlite3 :memory: "select datetime(strftime('%s', '2015-07-31 16:11:02', 'utc') , 'unixepoch', 'localtime')" 2015-07-31 16:11:02 %
オマケ。現在時刻の扱い。
-- iso8601 で. (timezone 抜き) select datetime('now'); -- timestamp として select strftime('%s', 'now');