Nodeとmysqlのタイムゾーンの理解
1859 ワード
mysqlのtimestamp
これはシステム時間とタイムゾーンに基づいて、データの時間とタイムゾーンと計算する.例えばシステム時間は2017-10-09 14:00:00,+8区である.データベースのタイムゾーンを変更すると、上記の方法で得られる結果は以下の通りである.
個人的にはタイムゾーンが設置されている現地時間がわかります.
timestampタイプとdatetimeタイプ
テスト用のテーブルを作成し、2つのタイプのフィールドを1つずつ作成します.
timezoneはまだ+8
この場合、タイムゾーンを変更しないで、直接selectして、得られた2つの値はすべて挿入とそっくりです.タイムゾーンを+4に変更すると、得られた結果はそれぞれ
nodeで操作するとき
nodeのmysql接続も+8区で、ttimestampはよく理解して、+8区の
tdatetimeは、T 16:00にもなるが、データベース接続が+8であるため、プログラムは+8の時間を取り出し、-8をutc時間に変換する.では、接続タイムゾーンを+4に設定します.結果は
説明は確かに私たちが考えているように、つまりdatetimeタイプであれば、挿入取り出し時にタイムゾーンを一致させなければならない.そうしないと時間が合わない.moment変換の場合、システムタイムゾーンに基づいて現地時間に変換する.
select current_timestamp();
これはシステム時間とタイムゾーンに基づいて、データの時間とタイムゾーンと計算する.例えばシステム時間は2017-10-09 14:00:00,+8区である.データベースのタイムゾーンを変更すると、上記の方法で得られる結果は以下の通りである.
SET TIME_ZONE ='+00:00'; -- ... 06:00:00
SET TIME_ZONE ='+04:00'; -- ... 10:00:00
個人的にはタイムゾーンが設置されている現地時間がわかります.
timestampタイプとdatetimeタイプ
テスト用のテーブルを作成し、2つのタイプのフィールドを1つずつ作成します.
CREATE TABLE test
(
id INT PRIMARY KEY AUTO_INCREMENT,
tdatetime DATETIME,
ttimestamp TIMESTAMP
);
timezoneはまだ+8
insert into test (tdatetime, ttimestamp) VALUES ('2017-10-10 00:00:00', '2017-10-10 00:00:00');
この場合、タイムゾーンを変更しないで、直接selectして、得られた2つの値はすべて挿入とそっくりです.タイムゾーンを+4に変更すると、得られた結果はそれぞれ
2017-10-10 00:00:00
と2017-10-09 20:00:00
であり、datetimeとタイムゾーンは関係ないようで、何を挿入するかが何であるかを説明する.timestampはタイムゾーンに基づいて計算し、現地時間に戻る.timestampが格納されているときはutc秒数に変換されているそうです.current_timestamp()
を用いる場合も同様である、時間帯から現地時間を算出してから挿入する.nodeで操作するとき
connection.query('select * from test where id=1', function (error, results) {
console.log(results[0]);
});
// ,
// +8 2017-10-10 00:00:00
{
tdatetime: 2017-10-09T16:00:00.000Z,
ttimestamp: 2017-10-09T16:00:00.000Z,
id: 1
}
nodeのmysql接続も+8区で、ttimestampはよく理解して、+8区の
2017-10-10 00:00:00
がutcに対応するのは2017-10-09 16:00:00
で、実際には何区に設置してもttimestampは変わらない.tdatetimeは、T 16:00にもなるが、データベース接続が+8であるため、プログラムは+8の時間を取り出し、-8をutc時間に変換する.では、接続タイムゾーンを+4に設定します.結果は
{
tdatetime: 2017-10-09T20:00:00.000Z,
ttimestamp: 2017-10-09T16:00:00.000Z,
id: 1
}
説明は確かに私たちが考えているように、つまりdatetimeタイプであれば、挿入取り出し時にタイムゾーンを一致させなければならない.そうしないと時間が合わない.moment変換の場合、システムタイムゾーンに基づいて現地時間に変換する.