我们正在部署我们自己的流量计(很像USGS规格: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之间发生变化.这一变化发生在今年3月11日,我在下面的DST线两侧都包含了日期.我正在使用我的Windows 7笔记本电脑进行开发,之后我们将在Unix机器上进行部署.Postgres显然发现我的Windows电脑设置在美国东部时区.我正在尝试使用"没有时区的时间戳"字段和"带时区的时间戳"字段但无法使其工作.
我已经尝试在我的选择中使用"在时区",并且每件事都在工作,直到显示时区为止.当我在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"
Run Code Online (Sandbox Code Playgroud)
我将每个仪表所在的时区存储在一个字符变化字段中的单独表格中.我考虑过只将这个值附加到时间输出的末尾,但我希望它在没有我干预的情况下从CST更改为CDT.
谢谢你的帮助.
I have a simple table that store precipitation readings from online gauges. Here's the table definition:
CREATE TABLE public.precip
(
gauge_id smallint,
inches numeric(8, 2),
reading_time timestamp with time zone
)
CREATE INDEX idx_precip3_id
ON public.precip USING btree
(gauge_id)
CREATE INDEX idx_precip3_reading_time
ON public.precip USING btree
(reading_time)
CREATE INDEX idx_precip_last_five_days
ON public.precip USING btree
(reading_time)
TABLESPACE pg_default WHERE reading_time > '2017-02-26 00:00:00+00'::timestamp with time zone
Run Code Online (Sandbox Code Playgroud)
It's grown quite large: about 38 million records that go back 18 months. Queries rarely …