Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Ruby或Rails中,将东部时间转换为UTC的最佳方式是什么?_Ruby On Rails_Ruby_Datetime_Utc - Fatal编程技术网

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

Ruby on rails 在Ruby或Rails中,将东部时间转换为UTC的最佳方式是什么?,ruby-on-rails,ruby,datetime,utc,Ruby On Rails,Ruby,Datetime,Utc,我不是指 myDateTime = DateTime.now myDateTime.new_offset(Rational(0, 24)) 或 我有一个文本日期是在东部时间给出的 我可以将文本日期转换为日期时间。让我们称之为东部日期时间 现在,我们有一个包含日期时间的变量,但除了我们之外,没有人知道它是东方的。我们自己将其转换将是相当繁重的。如果日期为夏令时(DST)(今年3月8日至11月1日),我们必须在东部日期时间变量中增加4小时才能获得UTC,如果日期为标准时间(ST),我们必须在东部日

我不是指

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

我有一个文本日期是在东部时间给出的

我可以将文本日期转换为日期时间。让我们称之为东部日期时间

现在,我们有一个包含日期时间的变量,但除了我们之外,没有人知道它是东方的。我们自己将其转换将是相当繁重的。如果日期为夏令时(DST)(今年3月8日至11月1日),我们必须在东部日期时间变量中增加4小时才能获得UTC,如果日期为标准时间(ST),我们必须在东部日期时间变量中增加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 
这不是我们想要的。我们必须指定MyAsterDateTime实际上是东方的。。。因此,当我们在16:30:00执行
myEasterDateTime.utc
时,我们得到的结果是20:30:00

我如何才能做到这一点?

有一个:

此后一直是:


时间类的对象有一个名为
dst?
的方法,它基本上告诉您dst是否适用。因此,您基本上可以确定DST/ST是否适用,并决定添加-4还是5

e、 g.
Time.now.dst?

如果返回true,则添加4,否则添加5。

在编辑的文章中,您的时间字符串需要与UTC的偏移量

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


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

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 

我在哪里可以得到所有时区的列表,如“美国/东部”。有命令吗?
ActiveSupport::TimeZone.zones\u map.values.collect{z | z.name}
我不知道如何将东部文本日期转换为东部时间,然后使用in|u Time\u zone方法获得UTC等效值。我在原来的帖子中添加了一个编辑。
myasterndateTime.in_time_zone('utc')
,但它无法完成任务。这将我们的下午4:30时间设置为UTC,这意味着我们的变量现在包含16:30 UTC。我们下午4:30的文本是在东部时间发给我们的。所以我们的变量只包含“16:30 UTC”。下午4:30是“20:30 UTC”。你可以在这里找到更多信息-非常接近是的,只是传递给我的文本不包含偏移量。这只是一个文本日期,应该是假定的。编辑答案来解释这一点,不幸的是,这也不太管用,因为东部时间并不总是UTC的-5(-图片前最后一段的最后一句话)。DST期间为-4,但ST期间为-5。到目前为止,我唯一能做到这一点的方法是在我发布的这个原始问题的答案中,但它不是很干净。虽然有几行,但正如您所见,它处理DST(例如2015年4月20日)和ST(例如2015年11月20日)。反正我能把它清理干净?是的。。。这不是我在回答中的代码风格(只是个人偏好!!!)。我只需要这样做,
eastern\u time=DateTime.parse(text\u time)。更改(offset:time.zone\u offset('EST'))
以说明DST,等等。这显然看起来更好,但似乎不起作用。它给出的日期时间是+0000,而不是-5000
now.time_in_zone('UTC')
DateTime.now.in_time_zone('US/Pacific')
 => Wed, 22 Apr 2015 12:36:33 PDT -07:00 
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
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