相关疑难解决方法(0)

在Rails和PostgreSQL中完全忽略时区

我正在处理Rails和Postgres中的日期和时间并遇到这个问题:

数据库采用UTC格式.

用户在Rails应用程序中设置选择的时区,但仅在获取用户本地时间来比较时间时使用.

用户存储时间,例如2012年3月17日晚上7点.我不希望存储时区转换或时区.我只想保存日期和时间.这样,如果用户改变他们的时区,它仍将显示2012年3月17日,晚上7点.

我只使用用户指定的时区来获取用户本地时区当前时间之前或之后的记录.

我目前正在使用"没有时区的时间戳",但是当我检索记录时,rails(?)会将它们转换为应用程序中的时区,这是我不想要的.

Appointment.first.time
 => Fri, 02 Mar 2012 19:00:00 UTC +00:00 
Run Code Online (Sandbox Code Playgroud)

因为数据库中的记录似乎是以UTC形式出现的,我的黑客是用当前时间,用'Date.strptime(str,"%m /%d /%Y")删除时区,然后做我的查询:

.where("time >= ?", date_start)
Run Code Online (Sandbox Code Playgroud)

似乎必须有一种更简单的方法来忽略周围的时区.有任何想法吗?

postgresql timezone datetime ruby-on-rails ruby-on-rails-3

156
推荐指数
1
解决办法
3万
查看次数

数据类型"带时区的时间戳"中的时区存储

在PostgreSQL,数据类型timestamptimestamp with timezone都使用8个字节.

我的问题是:

  1. 什么格式用于在时间戳中存储日期和时间?
  2. 时区信息如何存储在timestamp with timezone 类型中,以及在读取类型时如何解析?

sql postgresql timezone datetime types

6
推荐指数
2
解决办法
4418
查看次数

Postgres 时间与时区相等

time with time zone在 Postgres 中遇到了一些问题。 timestamp with time zone等式按我的预期工作,如果在规范化时区后时间相同,则它应该是真的:

postgres=# select '2013-06-27 12:00:00 -0800'::timestamp with time zone = '2013-06-27 14:00:00 -0600'::timestamp with time zone;
 ?column?
----------
 t
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不适用于time with time zone

postgres=# select '12:00:00 -0800'::time with time zone = '14:00:00 -0600'::time with time zone;
 ?column?
----------
 f
Run Code Online (Sandbox Code Playgroud)

然而,不平等如何运作,我希望它们能:

postgres=# select '12:00:00 -0800'::time with time zone < '14:01:00 -0600'::time with time zone;
 ?column?
----------
 t

postgres=# select '12:00:00 -0800'::time with time zone > '13:59:00 -0600'::time …
Run Code Online (Sandbox Code Playgroud)

sql postgresql time timezone

5
推荐指数
1
解决办法
1165
查看次数