SQLITE3でUNIXタイムスタンプを日付文字列に変換する 
2019/10/29 Tue.
SQLITE3で日付を扱う際にテキスト型ではなく数値型でUNIXタイムスタンプを格納している場合があります。
それを、日付文字列形式で取得する方法です。
それを、日付文字列形式で取得する方法です。
●UNIXタイムスタンプを日付形式文字列に変換する関数
datetime(数値型項目名, 'unixepoch', 'localtime')
たとえば、数値型項目「timestamp」にUNIXタイム「1595516400」が入っている場合、
●日付文字列を任意の表記に整える関数
strftime(フォーマット文字列, 日付文字列)
たとえば、先ほどの項目を「9999年99月99日 99時99分」と出力したい場合、
その他、datetime()関数で現在日時を取得することもできます。
注意点としては返ってくる時間のタイムゾーンがUTC(日本時間からマイナス9時間)です。
日本時間で取得したい場合は「localtime」を付けます。
さらに、datetime()関数は日時の計算もできます。
なお、先ほど
日本時間(タイムゾーンJST)はUTCより9時間進んでいますので、
もし時間が必要ない場合は「date()」関数もあります。
これらの関数の詳細はhttps://sqlite.org/lang_datefunc.htmlこちらをご覧ください。
datetime(数値型項目名, 'unixepoch', 'localtime')
たとえば、数値型項目「timestamp」にUNIXタイム「1595516400」が入っている場合、
select datetime(timestamp, 'unixepoch', 'localtime') from テーブル名;
としたら「2020-07-24 00:00:00」が出力されます。●日付文字列を任意の表記に整える関数
strftime(フォーマット文字列, 日付文字列)
たとえば、先ほどの項目を「9999年99月99日 99時99分」と出力したい場合、
select strftime('%Y年%m月%d日 %H時%M分', datetime(timestamp, 'unixepoch', 'localtime')) from テーブル名;
としたら「2020年07月24日 00時00分」が出力されます。その他、datetime()関数で現在日時を取得することもできます。
select datetime('now');
select datetime(current_timestamp);
上記二つは同じ内容(現在日時)が返ります。select datetime(current_timestamp);
注意点としては返ってくる時間のタイムゾーンがUTC(日本時間からマイナス9時間)です。
日本時間で取得したい場合は「localtime」を付けます。
select datetime('now','localtime');
さらに、datetime()関数は日時の計算もできます。
select datetime('now','+7 days', 'localtime');
このように書くと現在日時から7日後の日時が出力されます。月をまたがる場合もちゃんと計算してくれます。もちろん、マイナス計算もできます。なお、先ほど
select datetime('now','localtime');
とすれば日本時間で出力されますと説明しました。日本時間(タイムゾーンJST)はUTCより9時間進んでいますので、
select datetime('now','+9 hours');
とすれば同じ内容が出力されます。もし時間が必要ない場合は「date()」関数もあります。
select date(current_timestamp);
select date(current_date);
select date('now');
これらはすべて同じ内容を返します。select date(current_date);
select date('now');
これらの関数の詳細はhttps://sqlite.org/lang_datefunc.htmlこちらをご覧ください。
- 関連記事
category: データベース
この記事へのコメント
コメントの投稿
コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。
内容によっては表示されない場合がありますことご了承願います。