Parse Postgres日期存储为字符串,包括偏移时区

时间:2016-06-28 11:33:29

标签: ruby-on-rails postgresql activerecord timezone timezone-offset

我在postgresdb中将一些日期存储为字符串

"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")

2 个答案:

答案 0 :(得分: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")

应该成功。

答案 1 :(得分:0)

你可以试试这个方法

  

“星期五,2016年6月24日04:13:26 -0700”.to_datetime

希望,这会对你有帮助。