Seems like there should be an easy solution to this problem, yet I can''t seem to find one. Here is the issue: How do you assign a time zone to a Time object that results from a parsed date/time string? Example: - I receive a date time string from a date picker widget that does not include time zone info (i.e. "Mon May 11 18:24:37 2009"). - Time zone for this date is known and may be different than what''s local to the user - date/time is stored in the DB as unix time (i.e. 1242075962) - time zone is stored in the DB in tz format i(i.e. ''America/ New_York'') - I would like to be able to take a given date with its known time zone and calculate the equivalent unix time value.>> now = Time.now=> Mon May 11 18:24:37 -0400 2009>> now.to_i=> 1242080677>> parsed = DateTime.parse("Mon May 11 18:24:37 2009")=> Mon, 11 May 2009 18:24:37 +0000>> parsed.to_time=> Mon May 11 18:24:37 UTC 2009>> parsed.to_time.to_i=> 1242066277>> Time.at 1242066277=> Mon May 11 14:24:37 -0400 2009 It seems there should be a way to append the time zone to the string before it is parsed or to associate the parsed time with a time zone (without converting the time to the zone), however I can''t seem to find an answer. Any help would be greatly appreciated
Hi, The time zone is encoded in the string at the end e.g Mon, 11 May 2009 18:24:37 +1200 Is in a time zone that''s +12 (12 hours ahead of utc) DateTime.parse or Time.parse will read this correctly. So what you''re doing is using a js date picker that gives you a string like "Mon May 11 18:24:37 2009" You just need to append the time zone difference to "Mon May 11 18:24:37 2009 +1200" etc before parsing. I handle storing dates in the db a little differently than you, but if you know what you''re doing don''t worry about changing that part. I usually store dates in the db in utc format (I think you can configure this in environment.rb from memory), and you can easily set the user''s timezone in a filter in application controller Time.zone = user.time_zone which will handle all of the conversions for you. Cheers, Jeremy On May 12, 10:57 am, Randall <callmenanner...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Seems like there should be an easy solution to this problem, yet I > can''t seem to find one. > > Here is the issue: > How do you assign a time zone to a Time object that results from a > parsed date/time string? > > Example: > - I receive a date time string from a date picker widget that does not > include time zone info (i.e. "Mon May 11 18:24:37 2009"). > - Time zone for this date is known and may be different than what''s > local to the user > - date/time is stored in the DB as unix time (i.e. 1242075962) > - time zone is stored in the DB in tz format i(i.e. ''America/ > New_York'') > - I would like to be able to take a given date with its known time > zone and calculate the equivalent unix time value. > > >> now = Time.now > > => Mon May 11 18:24:37 -0400 2009>> now.to_i > > => 1242080677 > > >> parsed = DateTime.parse("Mon May 11 18:24:37 2009") > > => Mon, 11 May 2009 18:24:37 +0000>> parsed.to_time > > => Mon May 11 18:24:37 UTC 2009>> parsed.to_time.to_i > => 1242066277 > >> Time.at 1242066277 > > => Mon May 11 14:24:37 -0400 2009 > > It seems there should be a way to append the time zone to the string > before it is parsed or to associate the parsed time with a time zone > (without converting the time to the zone), however I can''t seem to > find an answer. > > Any help would be greatly appreciated
Thanks Jeremy! On May 12, 6:31 pm, Jeremy Olliver <jeremy.olli...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi, > > The time zone is encoded in the string at the end e.g > > Mon, 11 May 2009 18:24:37 +1200 > Is in a time zone that''s +12 (12 hours ahead of utc) > DateTime.parse or Time.parse will read this correctly. > > So what you''re doing is using a js date picker that gives you a string > like "Mon May 11 18:24:37 2009" > You just need to append the time zone difference to "Mon May 11 > 18:24:37 2009 +1200" etc before parsing. > > I handle storing dates in the db a little differently than you, but if > you know what you''re doing don''t worry about changing that part. > I usually store dates in the db in utc format (I think you can > configure this in environment.rb from memory), and you can easily set > the user''s timezone in a filter in application controller > Time.zone = user.time_zone > which will handle all of the conversions for you. > > Cheers, > Jeremy > > On May 12, 10:57 am, Randall <callmenanner...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > Seems like there should be an easy solution to this problem, yet I > > can''t seem to find one. > > > Here is the issue: > > How do you assign a time zone to a Time object that results from a > > parsed date/time string? > > > Example: > > - I receive a date time string from a date picker widget that does not > > include time zone info (i.e. "Mon May 11 18:24:37 2009"). > > - Time zone for this date is known and may be different than what''s > > local to the user > > - date/time is stored in the DB as unix time (i.e. 1242075962) > > - time zone is stored in the DB in tz format i(i.e. ''America/ > > New_York'') > > - I would like to be able to take a given date with its known time > > zone and calculate the equivalent unix time value. > > > >> now = Time.now > > > => Mon May 11 18:24:37 -0400 2009>> now.to_i > > > => 1242080677 > > > >> parsed = DateTime.parse("Mon May 11 18:24:37 2009") > > > => Mon, 11 May 2009 18:24:37 +0000>> parsed.to_time > > > => Mon May 11 18:24:37 UTC 2009>> parsed.to_time.to_i > > => 1242066277 > > >> Time.at 1242066277 > > > => Mon May 11 14:24:37 -0400 2009 > > > It seems there should be a way to append the time zone to the string > > before it is parsed or to associate the parsed time with a time zone > > (without converting the time to the zone), however I can''t seem to > > find an answer. > > > Any help would be greatly appreciated
On Tue, May 12, 2009 at 6:31 PM, Jeremy Olliver <jeremy.olliver-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On May 12, 10:57 am, Randall <callmenanner...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> Seems like there should be an easy solution to this problem, yet I >> can''t seem to find one. >> >> Here is the issue: >> How do you assign a time zone to a Time object that results from a >> parsed date/time string? >> >> Example: >> - I receive a date time string from a date picker widget that does not >> include time zone info (i.e. "Mon May 11 18:24:37 2009"). >> - Time zone for this date is known and may be different than what''s >> local to the user >> - date/time is stored in the DB as unix time (i.e. 1242075962) >> - time zone is stored in the DB in tz format i(i.e. ''America/ >> New_York'') >> - I would like to be able to take a given date with its known time >> zone and calculate the equivalent unix time value....>> >> It seems there should be a way to append the time zone to the string >> before it is parsed or to associate the parsed time with a time zone >> (without converting the time to the zone), however I can''t seem to >> find an answer. >>>> The time zone is encoded in the string at the end e.g > > Mon, 11 May 2009 18:24:37 +1200 > Is in a time zone that''s +12 (12 hours ahead of utc) > DateTime.parse or Time.parse will read this correctly. > > So what you''re doing is using a js date picker that gives you a string > like "Mon May 11 18:24:37 2009" > You just need to append the time zone difference to "Mon May 11 > 18:24:37 2009 +1200" etc before parsing.Careful here, there''s a diference between a time zone like "America/New_York" and a time zone offset http://www.w3.org/TR/timezone/> > I handle storing dates in the db a little differently than you, but if > you know what you''re doing don''t worry about changing that part. > I usually store dates in the db in utc format (I think you can > configure this in environment.rb from memory), and you can easily set > the user''s timezone in a filter in application controller > Time.zone = user.time_zone > which will handle all of the conversions for you.Or to convert to an arbitrary timezone Time.at(unix_time).in_timezone(''America/New_York") -- Rick DeNatale Blog: http://talklikeaduck.denhaven2.com/ Twitter: http://twitter.com/RickDeNatale WWR: http://www.workingwithrails.com/person/9021-rick-denatale LinkedIn: http://www.linkedin.com/in/rickdenatale