如何在Firebird 4中将Epoch转换为考虑时区的Datetime?
Firebird 4 支持Epoch转带时区的Datetime吗?
是的,Firebird 4完全支持将Epoch时间转换成考虑时区的Datetime,核心依赖它引入的TIMESTAMP WITH TIME ZONE类型及相关时区转换能力。
问题分析
你当前的SQL使用无时区的TIMESTAMP类型,基准时间TIMESTAMP '1970-01-01 00:00:00'默认对应UTC时间,转换后得到的结果自然是UTC时区的时间,所以输出1970-01-02 00:00:00。而CET时区比UTC快1小时,需要显式进行时区转换才能得到期望的1970-01-02 01:00:00。
修正后的SQL语句
SELECT EPOCH, SUBSTRING(CAST( DATEADD(SECOND, CAST(EPOCH AS BIGINT), TIMESTAMP '1970-01-01 00:00:00' AT TIME ZONE 'UTC') AT TIME ZONE 'CET' AS VARCHAR(24)) FROM 1 FOR 19) AS DATETIME FROM unix_epoch
逻辑说明
- 先将基准时间
1970-01-01 00:00:00标记为UTC时区(AT TIME ZONE 'UTC'),确保Epoch转换的起点是标准UTC时间。 - 使用
DATEADD添加Epoch秒数,得到UTC时区的带时区时间戳。 - 通过
AT TIME ZONE 'CET'将UTC时间转换为CET时区的本地时间。 - 最后按原逻辑格式化输出字符串。
执行上述SQL后,EPOCH值86400对应的输出会是1970-01-02 01:00:00,符合你的期望。
内容的提问来源于stack exchange,提问作者sid_com
相关产品推荐
相关产品推荐

