Di PostgreSQL, Pemformatan cap waktu tidak tergantung pada penyimpanan. Salah satu jawabannya adalah dengan menggunakan to_char
dan format stempel waktu ke format apa pun yang Anda butuhkan saat Anda membutuhkannya, seperti ini:
select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');
select to_timestamp('2012-10-11 12:13:14.123',
'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;
Tetapi jika Anda harus mengatur format default:
Ubah format cap waktu postgresql secara global:
Lihatlah zona waktu Anda, jalankan ini sebagai kueri sql:
show timezone
Result: "US/Eastern"
Jadi ketika Anda mencetak current_timestamp, Anda melihat ini:
select current_timestamp
Result: 2012-10-23 20:58:35.422282-04
-04
pada akhirnya adalah zona waktu Anda relatif terhadap UTC. Anda dapat mengubah zona waktu dengan:
set timezone = 'US/Pacific'
Kemudian:
select current_timestamp
Result: 2012-10-23 18:00:38.773296-07
Jadi perhatikan -07
di sana, itu berarti kita Pasifik berjarak 7 jam dari UTC. Bagaimana cara menghilangkan zona waktu yang tidak sedap dipandang itu? Salah satu caranya adalah dengan membuat tabel, defaultnya adalah stempel waktu tanpa zona waktu:
CREATE TABLE worse_than_fail_table
(
mykey INT unique not null,
fail_date TIMESTAMP not null
);
Kemudian jika Anda menambahkan stempel waktu ke tabel itu dan memilihnya
select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146
yay, tidak ada zona waktu di akhir. Tetapi Anda ingin kontrol lebih besar atas bagaimana stempel waktu muncul secara default! Anda dapat melakukan sesuatu seperti ini:
CREATE TABLE moo (
key int PRIMARY KEY,
boo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Ini adalah bidang teks yang memberi Anda lebih banyak kontrol atas bagaimana itu muncul secara default ketika Anda melakukan select somecolumns from sometable
. Perhatikan bahwa Anda dapat memberikan string ke stempel waktu:
select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789
Anda dapat memberikan current_timestamp ke timestamp
yang menghapus zona waktu:
select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047
Anda dapat menyingkirkan zona waktu seperti ini:
select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"
Tetapi jika Anda benar-benar ingin zona waktu kembali, Anda dapat melakukan ini:
select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04
Anda dapat mencabut apa yang Anda inginkan dengan ekstrak:
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
Dan kengerian ini:
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40