1

我有 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'
4

2 回答 2

3

您可以像这样解析日期

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 
于 2012-11-19T21:34:20.640 回答
2

如果要在 中指定的区域中解析时间config.time_zone,可以使用:

Time.zone.parse('2012-08-14 14:48:47 +1000')

不过,除非您有一些特殊要求,否则我不会使用 DateTime,因为 Time 类现在支持大范围的日期,并且 Rails 通过 Time.zone 处理时区非常好。

于 2013-04-13T16:14:35.057 回答