How can I convert a Time from some timezone to UTC, taking into account Daylight Saving, in Ruby?
我有一个应用程序,其中不同的用户在全球的不同地区(我知道他们的时区),他们可以输入日期和时间,我需要将所有内容以UTC格式存储在数据库中。
通常我的时间变量实例,我正在做:
1 | DateTime.new(date.year, date.month, date.day, hours, minutes, 0) |
这已经是UTC,但没有转换。
如果我使用time_zone(即"墨尔本")向该字符串添加第7个参数,那么它会将其解释为澳大利亚的日期,并且当转换为UTC时生成的DateTime落后10个小时,并且 作品。
但是,这没有考虑夏令时。
我需要的是做到这一点(例如日期/时间组件的日期时间),例如(例如澳大利亚),使用4月9日相同的小时/分钟将给我一个不同的偏移量 转换为UTC的时间比我4月5日使用的时间要长。
有任何想法吗?
谢谢!
丹尼尔
看看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | irb(main):002:0> require 'tzinfo' => true irb(main):003:0> tz = TZInfo::Timezone.get("Australia/Melbourne") => #<TZInfo::DataTimezone: Australia/Melbourne> irb(main):004:0> tz.utc_to_local(Time.parse("2013-04-05 00:00:00")) => Fri Apr 05 11:00:00 UTC 2013 irb(main):005:0> tz.utc_to_local(Time.parse("2013-04-09 00:00:00")) => Tue Apr 09 10:00:00 UTC 2013 irb(main):015:0> tz.local_to_utc(Time.parse("2013-04-09 00:00:00")) => Mon Apr 08 14:00:00 UTC 2013 irb(main):016:0> tz.local_to_utc(Time.parse("2013-04-05 00:00:00")) => Thu Apr 04 13:00:00 UTC 2013 |