小编Mat*_*rtz的帖子

Rails:如何将日期时间字符串解析为特定时区

我在Debian上使用Rails 3.2和ruby 1.9.3.我有一个应用程序,通过HTML表单以字符串的形式收集日期,时间和时区.像这样的东西:

start_date: "04-15-2010",
start_time: "10:00:00",
timezone: "Central Time (US & Canada)"
Run Code Online (Sandbox Code Playgroud)

我想要做的是将这3个元素解析为一个以UTC格式保存到我的数据库中的日期,在这种情况下,一旦它在UTC时区,就会增加7个小时到开始时间.因此,一旦它在数据库中作为UTC而不是收到的中央时间,存储的时间将是17:00.

我试过这样的东西来解析日期:

ActiveSupport::TimeZone[timezone].at DateTime.strptime("{ 2012-04-09 20:00:00 }", "{ %Y-%m-%d %H:%M:%S }").to_i
Run Code Online (Sandbox Code Playgroud)

但是,我无法将时区合并到%Z的结果时间中.它要么不解析,要么将时间解释为UTC而不是中心时间.所以我的问题是,如何在不改变存储的实际日期/时间值的情况下将日期字符串强制转换为某个时区.我希望能够将字符串解析成包括与它正确的时区的日期/时间对象在那个时候,这样未来的时区转换是准确的.我看了一遍,找不到办法做到这一点.这很奇怪,因为这似乎是从HTML表单输入的日期常见的事情.感谢您的任何帮助.

timezone ruby-on-rails date

36
推荐指数
3
解决办法
4万
查看次数

使用DateTime.strptime时不考虑Rails夏令时

我一直在研究解析字符串,我有一个测试用例,这对我来说一直是个问题.使用strptime解析日期/时间字符串时,不考虑夏令时.据我所知,这是一个错误.我找不到关于这个bug的任何文档.这是Rails控制台中的一个测试用例.这是ruby 1.9.3-p215和Rails 3.2.2.

1.9.3-p125 :049 >   dt = DateTime.strptime("2012-04-15 10:00 Central Time (US & Canada)", "%Y-%m-%d %H:%M %Z")  
=> Sun, 15 Apr 2012 10:00:00 -0600  
1.9.3-p125 :050 > dt = DateTime.strptime("2012-04-15 10:00 Central Time (US & Canada)", "%Y-%m-%d %H:%M %Z").utc  
=> Sun, 15 Apr 2012 16:00:00 +0000  
1.9.3-p125 :051 > dt = DateTime.strptime("2012-04-15 10:00 Central Time (US & Canada)", "%Y-%m-%d %H:%M %Z").utc.in_time_zone("Central Time (US & Canada)")  
=> Sun, 15 Apr 2012 11:00:00 CDT -05:00  
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我必须转换为utc然后回到时区才能正确解释DST,但随后时间也会移动一小时,所以它不是我从字符串中解析出来的.有人有这个错误的解决方法或更可靠的方法将日期+时间+时区可靠地解析到DateTime对象中,在该对象中正确表示夏令时吗?谢谢.

编辑:好的,我找到了一个解决方法,虽然我不确定它有多强大.

这是一个例子:

ActiveSupport::TimeZone["Central Time (US …
Run Code Online (Sandbox Code Playgroud)

timezone date ruby-on-rails-3

4
推荐指数
1
解决办法
1834
查看次数

标签 统计

date ×2

timezone ×2

ruby-on-rails ×1

ruby-on-rails-3 ×1