SQLiteのデフォルト(DEFAULT)でJST(日本時間)を使用する方法です。
追加時間や更新時間などのカラムで現在時刻を入れるときに使います。
SQLiteは標準でUTCになる
SQLiteの日付や時間は基本的にUTC(協定世界時)で表示されます。
なので、DATETIME(CURRENT_TIMESTAMP)やDATETIME(‘now’)としても表示されるのはUTCです。
日本時間はUTCに+9時間する必要があります。
UTCで入る
$ sqlite3 test.db
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
sqlite> CREATE TABLE test
...> (
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> name TEXT,
...> add_date TIMESTAMP DEFAULT (DATETIME(CURRENT_TIMESTAMP))
...> );
sqlite> INSERT INTO test(name) values ('first'), ('second');
sqlite> SELECT * FROM test;
id name add_date
-- ------ -------------------
1 first 2023-05-17 06:31:05
2 second 2023-05-17 06:31:05
add_dateをDEFAULT (DATETIME(CURRENT_TIMESTAMP))で作成した結果です。
INSERTした時間が「2023-05-17 06:31:05」になっています。
私はそんなに早起きではありません、こんな朝早くにブログの更新など絶対しないです。
JST(日本時間)で入れる
sqlite> CREATE TABLE test2
...> (
...> id INTEGER PRIMARY KEY AUTOINCREMENT,
...> name TEXT,
...> add_date TIMESTAMP DEFAULT (DATETIME(CURRENT_TIMESTAMP,'localtime'))
...> );
sqlite> INSERT INTO test2(name) values ('first'), ('second');
sqlite> SELECT * FROM test2;
id name add_date
-- ------ -------------------
1 first 2023-05-17 15:33:02
2 second 2023-05-17 15:33:02
add_dateをDEFAULT (DATETIME(CURRENT_TIMESTAMP,’localtime’))で作成した結果です。
localtimeにすることでJST(日本時間)にすることができます。
たぶんOSの時間設定を見てるのでしょう。
明示的に指定する
localtimeが曖昧で嫌だという場合は明示的に指定することができます。
「+9 hours」でもJST(日本時間)にすることができます。
sqlite> SELECT datetime('now', '+9 hours');
datetime('now', '+9 hours')
---------------------------
2023-05-17 15:34:56