我们正在部署自己的流量计(很像 USGS 流量计:http://waterdata.usgs.gov/usa/nwis/uv?site_no=03539600 http://waterdata.usgs.gov/usa/nwis/uv?site_no=03539600)这样我们皮划艇运动员就知道是否有足够的水来划溪,而不必浪费时间和汽油去那里开车。我们希望在横跨东部和中部时区的东南白水地区安装一些这样的设备。
我使用记录的 current_time 默认值来存储插入记录的时间。我想稍后使用显示数据MM/DD/YYYY HH12:MI AM TZ
格式,输出如下03/12/2012 01:00 AM CDT
。我还希望输出能够了解夏令时的变化,因此当我们“前进”和“后退”时,上一句的最后部分会在 CST 和 CDT 之间发生变化。此更改发生于今年 2012 年 3 月 11 日,我已在下面的 DST 线两侧添加了日期。我使用 Windows 7 笔记本电脑进行开发,稍后我们将在 Unix 机器上进行部署。 Postgres 显然检测到我的 Windows 计算机设置为美国东部时区。我正在尝试使用“无时区的时间戳”字段和“带时区的时间戳”字段,但无法使其工作。
我尝试在我的选择中使用“at time zone”,一切正常,直到显示时区。当我询问 CDT 中的时间时,实际小时是时间戳的一部分,正确减去一个小时。但输出中显示 EDT。
SELECT reading_time as raw,
reading_time at time zone 'CDT',
to_char(reading_time at time zone 'CDT',
'MM/DD/YYYY HH12:MI AM TZ') as formatted_time
FROM readings2;
"2012-04-29 17:59:35.65";"2012-04-29 18:59:35.65-04";"04/29/2012 06:59 PM EDT"
"2012-04-29 17:59:40.19";"2012-04-29 18:59:40.19-04";"04/29/2012 06:59 PM EDT"
"2012-03-10 00:00:00";"2012-03-10 00:00:00-05";"03/10/2012 12:00 AM EST"
"2012-03-11 00:00:00";"2012-03-11 00:00:00-05";"03/11/2012 12:00 AM EST"
"2012-03-12 00:00:00";"2012-03-12 01:00:00-04";"03/12/2012 01:00 AM EDT"
我将每个仪表所在的时区存储在一个单独的表的字符变化字段中。我考虑只是将此值附加到时间输出的末尾,但我希望它从 CST 更改为 CDT 而无需我的干预。
感谢您的帮助。
而不是使用时区缩写,例如CDT
or CST
,你可以考虑使用完整的奥尔森风格时区名称 http://en.wikipedia.org/wiki/List_of_tz_database_time_zones。如果是中部时间,您可以选择时区。与您的位置匹配的任一选项,例如America/Chicago
, 要不就US/Central
。这确保 PostgreSQL 使用 Olson tz 数据库自动确定任何给定日期是否适用夏令时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)