【发布时间】:2021-08-05 22:27:29
【问题描述】:
我正在使用 django 模型。 django 设置中的 TIMEZONE 是 UTC。 并通过算术构造时间戳。
return queryset.annotate(
**{f"server_time":RawSQL(
f'''
SELECT TO_TIMESTAMP((FLOOR((EXTRACT(EPOCH FROM "{gmdts_table}"."date_key" AT TIME ZONE %s) + %s) / %s)::INTEGER * %s) - %s)::TIMESTAMP
''',
params=[str(requested_time_zone), bucket_offset, time_interval, time_interval, bucket_offset]
)}
)
当我使用::timestamp 时,时间戳被返回为2021-07-26 00:00:00
如果我使用 ::TIMESTAMPTZ,它会变为 2021-07-26 00:00:00+00:00,即使 requested_time_zone 是 'America/New_York'
我希望输出为 2021-07-26 00:00:00-04:00 即。显示相同的时间,并附加“America/New_York”的偏移量。本质上我只是想附加偏移量。
我通过一些计算得出了这个时间戳,它实际上属于时区“America/New_York”(可以是任何时区,比如计算时间区)。
如何在不实际更改输出时间的情况下更新此时间戳的时区,即:
2021-07-26 00:00:00-04:00
当我使用AS TIME ZONE 'America/New_York' 时,我得到的输出为2021-07-26 04:00:00+00,这不是我想要的。
在 python 中,可以使用<datetime_object>.replace(tzinfo=new_time_zone) 轻松完成。我在 postgresql 中寻找同样的东西。
任何可以使用 django 数据库函数完成的方式都会有所帮助(我找不到任何方法)
【问题讨论】:
-
这需要更多信息: 1) 这个字段的数据类型是什么? 2)
2021-07-26 00:00:00+00:00在哪里返回? 3) 这是通过 Django 模型运行的吗? 4)settings中的时区设置是什么?将此添加为问题的更新。 -
完成!请回答。
-
"{gmdts_table}"."date_key"的数据类型是什么?在我看来,你让这件事变得更复杂了。 -
应该在
psql连接到数据库的客户端中添加什么:show TimeZone;返回? -
时区 ---------- 等/UTC(1 行)
标签: postgresql django-views timestamp timestamp-with-timezone