views:

70

answers:

3

Hi

i get a string from a external method with a time and date like so "07/09/10 14:50" is there any way i can convert that time in ruby to 'Pacific US' time knowing its 'UTC' time? with changes accounted for in the date? i.e if the time difference results in the day being different.

thanks

A: 

The technique is discussed in some detail in recipe 3.7 of the O'Reilly Ruby Cookbook

bjg
+2  A: 

Since it appears you are using rails, you have quite a few options. I suggest reading this article that talks all about time zones.

To convert to PST, both of these are rails-specific methods. No need to re-invent the wheel:

time = Time.parse("07/09/10 14:50")
time.in_time_zone("Pacific Time (US & Canada)")

Hope this helps

UPDATE: rails might try to get smart and give the time you specify as a string a time zone. To ensure that the time parses as UTC, you should specify in the string:

time = Time.parse("07/09/10 14:50 UTC")
time.in_time_zone("Pacific Time (US & Canada)")
Geoff Lanotte
i had a look at the article but it dosent show how i can convert from string form to date or time object? the method dosent work if i call it on the string "07/09/10 14:50"
Mo
I added the `Time.parse` statement to get the time from a string.
Geoff Lanotte
+3  A: 

To convert from string form to a date or time object you need to use strptime

require 'date'
require 'time'

my_time_string = "07/09/10 14:50"
to_datetime = DateTime.strptime(my_time_string, "%m/%d/%y %H:%M")    

utc_time = Time.parse(to_datetime.to_s).utc
pacific_time = utc_time - Time.zone_offset("PDT")

puts utc_time
puts pacific_time

This is pure ruby, so there are likely some rails-specific methods you could use specifically for this task, but this should get you started.

michaelmichael