sql - Postgres时间戳转换与时区
问题描述
我正在尝试使用我在互联网上找到的这个查询来转换时区,但很难理解它。
基本上,我想从源文件中读取日期字符串并将其存储在该用户时区的数据库中。数据库列是时间timestamp without time zone.
假设用户的时区是已知的'America/Chicago'
,源文件时间戳是'2018-06-06 05:00:00'
现在要将源日期时间转换为此时区,我使用了:
select (('2018-06-06 05:00:00'::timestamp AT TIME ZONE 'GMT' )
at time zone 'America/Chicago') as t
但是,这给出了2018-06-06 00:00:00
,这是不正确的,因为时间被截断了。
如果我不将该值转换为时间戳,它会使用 GMT offset 给出正确的值2018-06-06 10:00:00+05:30
。
select (('2018-06-06 05:00:00' AT TIME ZONE 'GMT' )
at time zone 'America/Chicago') as t
我不确定如何正确解释这些结果,而且我对时间戳/时区的了解也不是很好。任何人都可以解释如何理解这些查询以及简单地获取值的正确方法是什么2018-06-06 10:00:00
,我必须将其存储在表中?
解决方案
该代码有效。时间不会被截断。格林威治标准时间上午 5:00 是芝加哥时间的午夜。
但是,如果你想要上午 10:00,那么我认为你的时区倒退了,你真的想要:
select (('2018-06-06 05:00:00'::timestamp at time zone 'America/Chicago') at time zone 'GMT' ) as t
这将芝加哥时间上午 5:00 转换为格林威治标准时间。
推荐阅读
- python - 为什么我不能从我的 github 存储库中读取 joblib 文件?
- android - 无法从 ViewModel 向用户显示协程错误消息
- ios - 获取 UIButtons 的 Size (x, y, width, height)
- linux - Linux上的cd(更改目录)命令
- google-classroom - 当 Google Classrom 为参加课程的教师列出 courseWork API 时收到 403
- angular - 如果隐藏元素,如何检测 Angular 中的屏幕尺寸是否发生变化?
- spring-integration - 没有数据源轮询的 MessageChannelPartionHandler 堆栈跟踪
- r-markdown - tinytex:::is_tinytex() 返回 true,但我仍然无法从 rmarkdown 编织到 PDF
- sql - 如何将表拆分为具有限制行数的多个部分?
- multipartform-data - 上传到 Next.js API 时损坏的图像