Postgreslerde, ve olarak timestamp with time zonekısaltılabilir . Basitlik için kısa tip isimleri kullanacağımtimestamptztimestamp without time zonetimestamp
Unix zaman damgasını bir postgres'den almak , dediğiniz timestamptzgibi now(), basittir:
select extract(epoch from now());
Gerçekten timestamptzde dahil olmak üzere herhangi bir türden mutlak zaman alma hakkında bilmeniz gereken her şey now().
Sadece timestamptarla varken işler karmaşıklaşıyor .
Bu alana timestamptzbenzer verileri koyduğunuzda now(), önce belirli bir saat dilimine dönüştürülecek (açık bir şekilde at time zoneveya oturum saat dilimine dönüştürülerek) ve saat dilimi bilgileri atılacaktır . Artık mutlak bir zaman değil. Bu nedenle genellikle zaman damgalarını timestampnormalde kullanacağınız gibi saklamak istemezsiniz timestamptz- belki de her saat 6: 00'da belirli bir tarihte bir film yayınlanır , işte böyle bir kullanım durumudur.
Sadece tek bir saat diliminde çalışırsanız, (mis) ile kurtulabilirsiniz timestamp. Geri dönüş timestamptz, DST ile başa çıkmak için yeterince zekidir ve zaman damgalarının, dönüşüm amaçları için geçerli zaman diliminde olduğu varsayılır. İşte GMT / BST için bir örnek:
select '2011-03-27 00:59:00.0+00'::timestamptz::timestamp::timestamptz
, '2011-03-27 01:00:00.0+00'::timestamptz::timestamp::timestamptz;
/*
|timestamptz |timestamptz |
|:---------------------|:---------------------|
|2011-03-27 00:59:00+00|2011-03-27 02:00:00+01|
*/
DBFiddle
Ancak, aşağıdaki kafa karıştırıcı davranışa dikkat edin:
set timezone to 0;
values(1, '1970-01-01 00:00:00+00'::timestamp::timestamptz)
, (2, '1970-01-01 00:00:00+02'::timestamp::timestamptz);
/*
|column1|column2 |
|------:|:---------------------|
| 1|1970-01-01 00:00:00+00|
| 2|1970-01-01 00:00:00+00|
*/
DBFiddle
Bunun nedeni :
PostgreSQL, türünü belirlemeden önce değişmez bir dizgenin içeriğini asla incelemez ve bu nedenle her ikisine de […] zaman dilimi olmadan zaman damgası olarak davranır. Bir değişmezin zaman dilimi ile zaman damgası olarak değerlendirildiğinden emin olmak için doğru açık türü belirtin… Zaman dilimi olmadan zaman damgası olduğu belirlenen bir değişmezde, PostgreSQL herhangi bir zaman dilimi göstergesini sessizce yoksayır