我有3个对象 - @ date,@ time和@datetime。如何使用对象@time和@datetime中的区域将对象@date转换为时间(和日期时间)?
示例:
@date = '2012-1-1'
@time = '2012-08-14 14:48:47 +1000'
@datetime = '2012-08-14 14:48:47 +0500'
@converted_date_to_time = ... # should give '2012-1-1 00:00:00 +1000'
@converted_date_to_datetime = ... # should give '2012-1-1 00:00:00 +0500'
答案 0 :(得分:2)
您可以解析这样的日期
1.9.3p194> date = '2012-1-1'
=> "2012-1-1"
1.9.3p194> Time.parse(date)
=> 2012-01-01 00:00:00 +1300
那是使用我当地的时区(惠灵顿,+ 13)。您也可以用同样的方式解析时间字符串
1.9.3p194> time = '2012-08-14 14:48:47 +1000'
=> "2012-08-14 14:48:47 +1000"
1.9.3p194> Time.parse(time)
=> 2012-08-14 16:48:47 +1200
您会注意到它看起来有点不对,但那是因为它再次使用我的本地时区,所以它准确但目前在我的时区。然后,您可以将其转换为您想要的时区。
1.9.3p194> Time.parse(time).in_time_zone('Moscow')
=> Tue, 14 Aug 2012 08:48:47 MSK +04:00
1.9.3p194> Time.parse(time).in_time_zone('Brisbane')
=> Tue, 14 Aug 2012 14:48:47 EST +10:00
这也适用于您的datetime
字符串。
如果您想使用特定时区,可以按照以下步骤进行操作
1.9.3p194> Time.find_zone('Tokyo').parse('2012-08-14 14:48:47 +0500')
=> Tue, 14 Aug 2012 18:48:47 JST +09:00
答案 1 :(得分:2)
如果您希望在config.time_zone
中指定的区域中解析时间,可以使用:
Time.zone.parse('2012-08-14 14:48:47 +1000')
我不会使用DateTime,除非你有一些特殊要求,因为Time类现在支持大范围的日期,Rails通过Time.zone处理时区真的很好。