Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

timezone

ruby

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?

like image 974
farhadf Avatar asked Nov 24 '10 00:11

farhadf


People also ask

How do you parse time in Ruby?

Ruby | DateTime parse() function DateTime#parse() : parse() is a DateTime class method which parses the given representation of date and time, and creates a DateTime object. Return: given representation of date and time, and creates a DateTime object.

How to parse time in Rails?

Use String#in_time_zone (Rails 4+) This parses the date and time in the String into the time zone provided.


2 Answers

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 
like image 74
maerics Avatar answered Sep 28 '22 03:09

maerics


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.

like image 44
Pete Brumm Avatar answered Sep 28 '22 03:09

Pete Brumm