Masalahnya tampaknya tidak terkait dengan Amazon RDS:ini berkaitan dengan konvensi yang digunakan oleh PostgreSQL. Dalam hal ini, Anda melakukan memiliki nama zona waktu ke belakang. Maksud Anda 'UTC-01'
tempat Anda menulis .'UTC+01'
Dari manual :
Jadi string zona waktu digunakan untuk SET TIME ZONE
(dan tampilan SHOW timezone
, sesuai) atau AT TIME ZONE
konstruksi gunakan tanda berlawanan dari apa yang ditampilkan di timestamp
(with time zone
) literal! Itu adalah ketidaksepakatan yang sangat disayangkan antara standar ISO dan SQL di satu sisi dan POSIX di sisi lain. (Saya pikir POSIX yang harus disalahkan.) Lihat:
Tapi 'CET'
atau 'UTC-01'
keduanya masih berpotensi salah untuk Paris karena mereka tidak mengambil aturan untuk waktu musim panas diperhitungkan.
(DST adalah salah satu konsep paling tolol dalam sejarah umat manusia.)
Paris (seperti kebanyakan Eropa) menggunakan CET selama musim dingin dan CEST selama musim panas. Pengujian Anda dengan 'CET'
kebetulan kerja di bulan november. Jika Anda mencoba hal yang sama di musim panas, Anda mendapatkan hasil yang salah.
Untuk berjaga-jaga, selalu gunakan nama zona waktu 'Europe/Paris'
, yang mempertimbangkan aturan DST. Panggilan lebih mahal.
Fungsi current_time
mempertimbangkan aturan DST jika pengaturan zona waktu Anda menyiratkannya. Tapi 'UTC-01'
adalah offset waktu biasa. Saya tidak pernah menggunakan tipe data time with time zone
atau current_time
memulai dengan. Manual sekali lagi:
Pertimbangkan:
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC+01' AS plus_wrong
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC-01' AS minus_right
SELECT '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'CET' AS cet_winter
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CEST' AS cest_summer
, '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CET' AS cet_no_dst -- CET wrong!
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_summer
, '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_winter
Terkait: