Postgresql 当DST一天有82800秒时,为什么半天是43600秒?

Postgresql 当DST一天有82800秒时,为什么半天是43600秒?,postgresql,Postgresql,我有两个查询要计算一天半的时间 tucha=> select extract( epoch from '2019-03-31'::timestamptz +interval '1day' - '2019-03-31'::timestamptz ); date_part ----------- 82800 (1 row) tucha=> select extract( epoch from '2019-03-31'::timestamptz +interval '0.5

我有两个查询要计算一天半的时间

tucha=> select extract( epoch from '2019-03-31'::timestamptz +interval '1day' - '2019-03-31'::timestamptz );
 date_part 
-----------
     82800
(1 row)

tucha=> select extract( epoch from '2019-03-31'::timestamptz +interval '0.5day' - '2019-03-31'::timestamptz );
 date_part 
-----------
     43200
(1 row)
如果一天是82800,那么半天应该是41400,不是吗

tucha=> select extract( epoch from '2019-04-01'::timestamptz -'2019-03-31'::timestamptz )/2;
 ?column? 
----------
    41400
(1 row)
注意
postgresql
实际计算
43200
,但我希望
41400
与上次计算的表达式一样

注意两者:
1天
0.5天
期间包含DST发生的时间

UPD

是否有关于DST发生时如何计算半天的规范

不使用timestamptz:@a_horse_,名称:
Europe/Zaporozhye
。实际上在我的办公室里有23个小时timezone@LukaszSzozda:是的,但我想考虑一下timezone@EugenKonkov:在DST变更日,如果总是在0300时加或减小时,则前半天的长度为11或13小时,后半天的长度为12小时。还有其他方法可以实现这一点(当我在海军时,西行时区的变化在第二个狗表上进行了调整(1800-2000年,时钟在1900年后退一小时),东行时区的变化在中段(0000-0400)上进行了调整,时钟在0100时向前移动了一小时)。所以“半天”不是一天中的一半分钟,也可能并不总是相等的。@S-Man:这些计算也适用于月份。试着在28、29、30和31天的月份中使用半个月。斯曼。我同意你的观点,这些计算应该用例子加以说明