【问题标题】:Debugging Ruby Script For Changing Timezone Configuration File On Ubuntu在 Ubuntu 上调试用于更改时区配置文件的 Ruby 脚本
【发布时间】:2011-07-07 19:38:57
【问题描述】:
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 Asia/Chongqing,输出如下:

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 Europe/Amsterdam,最终得到以下结果:

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(我的注意:实际上重复了最后一个命令),并获得以下信息:

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

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

【问题讨论】:

  • 那么如果你重新启动脚本,你会得到正确的时区吗?
  • 是的。这就是让我困惑的地方:-(

标签: ruby ubuntu timezone


【解决方案1】:

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

$ dpkg-重新配置 tzdata

【讨论】:

  • 我明白你在说什么。从输出中可以看出,时间确实发生了变化。奇怪的是,它在第​​一次运行时并没有显示出变化。我想知道为什么它没有达到预期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多