How do I get Ruby to parse time as if it were in a different time zone?

孤人 提交于 2019-12-18 12:49:05

问题


I'm parsing something like this:

11/23/10 23:29:57

which has no time zone associated with it, but I know it's in the UTC time zone (while I'm not). How can I get Ruby to parse this as if it were in the UTC timezone?


回答1:


You could just append the UTC timezone name to the string before parsing it:

require 'time'
s = "11/23/10 23:29:57"
Time.parse(s) # => Tue Nov 23 23:29:57 -0800 2010
s += " UTC"
Time.parse(s) # => Tue Nov 23 23:29:57 UTC 2010



回答2:


If your using rails you can use the ActiveSupport::TimeZone helpers

current_timezone = Time.zone
Time.zone = "UTC"
Time.zone.parse("Tue Nov 23 23:29:57 2010") # => Tue, 23 Nov 2010 23:29:57 UTC +00:00
Time.zone = current_timezone

It is designed to have the timezone set at the beginning of the request based on user timezone.

Everything does need to have Time.zone on it, so Time.parse would still parse as the servers timezone.

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Note: the time format you have above was no longer working, so I changed to a format that is supported.




回答3:


An aliter to @Pete Brumm's answer without Time.zone set/unset

Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset



回答4:


If you are using ActiveSupport [from Rails, e.g], you can do this:

ActiveSupport::TimeZone["GMT"].parse("..... date string")



回答5:


credit from https://rubyinrails.com/2018/05/30/rails-parse-date-time-string-in-utc-zone/,

Time.find_zone("UTC").parse(datetime)
# => Wed, 30 May 2018 18:00:00 UTC +05:30



回答6:


Another pure Ruby (no Rails) solution if you don't want/need to load ActiveSupport.

require "time"

ENV['TZ'] = 'UTC'
Time.parse("2019/10/01 23:29:57")
#=> 2019-10-01 23:29:57 +0000


来源:https://stackoverflow.com/questions/4262550/how-do-i-get-ruby-to-parse-time-as-if-it-were-in-a-different-time-zone

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!