在Ubuntu上调试用于更改时区配置文件的Ruby脚本

时间:2011-07-07 19:38:57

标签: ruby ubuntu timezone

require 'java'

if ARGV.length == 0
  puts "Usage: jruby change_timezone.rb America/Toronto"
  exit
end

old_zone = File.read("../../../etc/timezone")
puts old_zone
time1 = Time.now
puts "Current Time:"+time1.localtime.to_s

new_zone = ARGV[0]
open('../../../etc/timezone','w') do |f|
  f.puts new_zone.to_s
  f.close
end

new_zone = File.read("../../../etc/timezone")
puts new_zone
time2 = Time.now
puts "Updated Time:"+time2.localtime.to_s

上面是我写的一个ruby脚本,用于更改ubuntu上的时区配置。它确实正确地更改了配置文件,但是,脚本的输出不是预期的。

假设时区的默认值是America / Toronto。 现在运行命令,jruby change_timezone.rb亚洲/重庆,然后输出:

America/Toronto
Current Time:Thu Jul 07 14:43:23 -0400 2011
Asia/Chongqing
Updated Time:Thu Jul 07 14:43:23 -0400 2011 (My Note: +0800 expected!!!)

继续执行命令,jruby change_timezone.rb欧洲/阿姆斯特丹,最终得到以下信息:

Asia/Chongqing
Current Time:Fri Jul 08 03:18:25 +0800 2011 (My Note: it actually got updated from last run!!!)
Europe/Amsterdam
Updated Time:Fri Jul 08 03:18:25 +0800 2011 (My Note: +0200 expected!!!)

更进一步,jruby change_timezone.rb欧洲/阿姆斯特丹(我的注意:实际上重复了最后一个命令),并获得以下内容:

Europe/Amsterdam
Current Time:Thu Jul 07 21:21:27 +0200 2011
Europe/Amsterdam
Updated Time:Thu Jul 07 21:21:27 +0200 2011

有人可以弄清楚为什么它没有按预期工作吗?

1 个答案:

答案 0 :(得分:0)

对于几乎所有Linux发行版而言,“/ etc / localtime”是正确时区文件的符号链接,或者是有效的时区文件。 'dpkg-reconfigure tzdata'命令使用'/ etc / timezone'文件在'/ etc / localtime'生成(或符号链接)有效时区文件。最后,时区文件位于'/ usr / share / zoneinfo /'。总而言之,我认为在'/ etc / timezone'文件发生变化后,你会错过最后一步。它要运行:

$ dpkg-reconfigure tzdata