From: Robert Klemme Date: 2004-12-01T17:17:45+09:00 Subject: Re: Timezone Adjustment? "zunda" schrieb im Newsbeitrag news:20041201053055.64878.qmail@web2305.mail.yahoo.co.jp... > Hi, > > > "displaying" > > the date/time from a database and justing it for the a users local > > timezone in a web application. > > > > Is there a simple way of doing this? > > What I have been doing is to play with the environment variable TZ: > > t = Time.now > ENV['TZ'] = 'HST' > puts t.localtime #=> Tue Nov 30 19:25:55 HST 2004 > ENV['TZ'] = 'Japan' > u = Time.at( t ) > puts t.localtime #=> Tue Nov 30 19:25:55 HST 2004 > puts u.localtime #=> Wed Dec 01 14:25:55 JST 2004 > > It seems that we have to create a new Time object to change timezone. Yeah, it seems so. > I also like to know more sofisticated ways to do this. Sounds like a candidate for an RCR. Ideall we would like to have Time#zone= (i.e. assignment). It seems as if Time.utc and Time.local ignore the time zone argument (is this a bug?). Here are my tests: 09:16:05 [robert.klemme]: ruby /c/temp/ruby/times.rb [6, 16, 10, 1, 12, 2004, 3, 336, false, "GMT+2:00"] [6, 16, 10, 1, 12, 2004, 3, 336, false, "GMT+1:00"] Wed Dec 01 10:16:06 GMT+2:00 2004 Wed Dec 01 10:16:06 GMT+2:00 2004 Wed Dec 01 10:16:06 UTC 2004 GMT+2:00 GMT+2:00 UTC 1101888966 1101888966 1101896166 -1101888966 0 -7200 09:16:06 [robert.klemme]: cat /c/temp/ruby/times.rb t1 = Time.now a = t1.to_a p a a[-1] = "GMT+1:00" p a t2 = Time.local(*a) t3 = Time.utc(*a) all = [t1,t2,t3] puts all puts all.map{|t| t.zone} i = all.map{|t| t.to_i} puts i i.inject(0) {|last,t| puts last-t;t} Kind regards robert