0

我作为字符串存储一些日期在postgresdb解析Postgres的日期存储为字符串包括偏移时区

"Fri, 24 Jun 2016 04:13:26 -0700" 

我希望把这些日子的日期。

我可以使用

to_timestamp(date,'Dy, DD Mon YYYY HH24:MI:SS') 

但我不能工作,如何处理时区。似乎有OF作为偏移量的参数。

如果我使用

to_timestamp(date, 'Dy, DD Mon YYYY HH24:MI:SS OF') 

查询挂起。我无法弄清楚我在那里做错了什么。

注意:我正在使用activerecord和rails。因此查询实际上

Model.all.order("to_timestamp(date,'Dy, DD Mon YYYY HH24:MI:SS OF') DESC") 
+0

也许吧? 'Time.zone.parse(“Fri,24 Jun 2016 04:13:26 -0700”)。to_date'。只是一个猜测。查看:http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html –

+0

PostgreSQL足够聪明:'选择带时区的时间戳'2016年6月24日星期五04:13:26 -0700';''返回' 2016-06-24 14:13:26 + 03'为我的位置。 – Abelisto

+0

@Abelisto有没有办法用to_timestamp方法做到这一点?问题是我试图用一个订单而不是一个选择。 – Carpela

回答

2

PostgreSQL支持多种格式的日期/时间/时间戳值输入。 See the reference

您的格式也受支持,因此可以使用简单类型转换。有三种方式以及两个类型符号PostgreSQL的:

timestamp with time zone或更短timestamptz

和类型转换,如:

cast('Fri, 24 Jun 2016 04:13:26 -0700' as timestamp with time zone) 
timestamp with time zone 'Fri, 24 Jun 2016 04:13:26 -0700' 
'Fri, 24 Jun 2016 04:13:26 -0700'::timestamptz 

是相等的。您可以根据自己的口味使用任意组合。

所以回答你的问题:

Model.all.order("date::timestamptz DESC") 

应该使的伎俩。

0

是你可以试试这个方法

“周五,2016年6月24日4时13分26秒-0700” .to_datetime

希望,这将有助于您。

+0

当然,我可以做到这一点,但我只能这样做,一旦我带回了查询。即我希望能够纯粹使用activerecord来完成某件事情。 – Carpela

+0

你的意思是说,你需要通过查询顺序的日期值? –

+0

这正是我想要做的。 – Carpela