ruby-on-rails 在Ruby或Rails中,什么是把东部时间转换为UTC的最佳方法?

ddarikpa  于 2023-08-08  发布在  Ruby
关注(0)|答案(4)|浏览(90)

我不是指

myDateTime = DateTime.now
myDateTime.new_offset(Rational(0, 24))

字符串
或者是

Time.now.utc


我有一个文本日期是东部时间。
我可以将文本日期转换为DateTime。我们称之为eastern_date_time
现在,我们有一个包含DateTime的变量,但除了我们之外,没有人知道它是东方的。我们自己转换它会很麻烦。如果日期是夏令时(DST)(今年3月8日至11月1日),我们必须在eastern_date_time变量中添加4小时才能获得UTC,如果日期是标准时间(ST),我们必须在eastern_date_time变量中添加5小时。
我们如何指定我们拥有的是东部日期时间,然后将其转换为UTC。确定日期是否在DST/ST中,并正确应用4或5小时?
我想把我得到的任何日期转换成UTC,以便存储在我的数据库中。

编辑:

使用`in_time_zone ',我无法将东部文本时间转换为UTC。我怎样才能实现这个目标?比如...

text_time = "Nov 27, 2015 4:30 PM" #given as Eastern
myEasternDateTime = DateTime.parse text_time # => Fri, 27 Nov 2015 16:30:00 +0000 
#now we need to specify that this myEasternDateTime is in fact eastern. However, it's our default UTC. If we use in_time_zone, it just converts the date at UTC to Eastern
myEasternDateTime.in_time_zone('Eastern Time (US & Canada)') # => Fri, 27 Nov 2015 11:30:00 EST -05:00 
myEasternDateTime.utc # => Fri, 27 Nov 2015 16:30:00 +0000


这不是我们想要的我们必须指定myEasterDateTime实际上是EasterDateTime。所以当我们在16:30:00做myEasterDateTime.utc时,我们最终得到的是20:30:00。
我怎么能做到这一点?

pbpqsu0x

pbpqsu0x1#

有一个time_in_zone method in the DateTime class

now.time_in_zone('UTC')

字符串
它是renamed to in_time_zone

DateTime.now.in_time_zone('US/Pacific')
 => Wed, 22 Apr 2015 12:36:33 PDT -07:00


您目前可以通过以下方式获得所有美国区域的列表(2023 / Rails 7)

ActiveSupport::TimeZone.us_zones.collect(&:name)


或另一个国家:

ActiveSupport::TimeZone.country_zones('ES')

evrscar2

evrscar22#

Time类的对象有一个名为dst?的方法,它基本上告诉你DST是否适用。因此,您基本上可以确定DST/ST是否适用,并决定添加-4或5。
例如Time.now.dst?如果返回true,则加4,否则加5。

ijxebb2r

ijxebb2r3#

在时区建议的帮助下我得到了这样的结果。

time_text_1 = "Apr 20, 2015 4:30PM" #Scraped as an Eastern Time, with no offset of -5:00 from UTC included
time_text_2 = "Nov 20, 2015 4:30PM" #Scraped as an Eastern Time, with no offset of -5:00 from UTC included

Time.zone = 'Eastern Time (US & Canada)'
my_time_1 = Time.zone.parse time_text_1 # Output: Mon, 20 Apr 2015 16:30:00 EDT -04:00 
my_time_2 = Time.zone.parse time_text_2 # Output: Fri, 20 Nov 2015 16:30:00 EST -05:00 

my_time_1.utc # Output: 2015-04-20 20:30:00 UTC 
my_time_2.utc # Output: 2015-11-20 21:30:00 UTC

字符串

ldxq2e6h

ldxq2e6h4#

在编辑后的文章中,您的时间字符串需要从UTC偏移。

**编辑III:**基于注解(仅设置一个字符串来表示东部时间,并需要考虑DST等)

text_time = "Nov 27, 2015 4:30 PM"
the_offset = Time.zone_offset('EST') / (60*60)
eastern_time = DateTime.parse(text_time).change(offset: the_offset.to_s) # Fri, 27 Nov 2015 16:30:00 -0500
eastern_time.utc # Fri, 27 Nov 2015 21:30:00 +0000

字符串

相关问题