如何在Ruby中将某个时区的时间转换为UTC,同时考虑到夏令时



我有一个应用程序,不同的用户在全球不同的地方(我知道他们的时区),他们可以输入日期和时间,我需要在数据库上存储UTC的一切。

通常要实例化我的时间变量,我正在做:

DateTime.new(date.year, date.month, date.day, hours, minutes, 0)

这已经是UTC格式了,但是没有转换。

如果我添加第7个参数的字符串与time_zone(即。"Melbourne"),那么它就会将其解释为澳大利亚的日期,而生成的DateTime在转换为UTC时,会晚10个小时左右,这样就可以了。

然而,这并没有考虑到夏令时。

我需要做的就是这样做(从日期/时间的组件中实例化一个DateTime),这样(例如,在澳大利亚的情况下),在4月9日使用相同的小时/分钟,在转换为UTC时将给我一个不同的偏移量,如果我使用4月5日。

任何想法?

谢谢!
丹尼尔

看看tzinfo

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

相关内容

  • 没有找到相关文章

最新更新