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
上記は、ubuntuのタイムゾーン設定を変更するために書いたルビースクリプトです。設定ファイルは適切に変更されますが、スクリプトの出力は期待どおりではありません。Ubuntuのタイムゾーン設定ファイルを変更するためのRubyスクリプトのデバッグ
タイムゾーンのデフォルト値を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
できる人をそれが期待どおりに機能しなかった理由を理解しますか?
したがって、スクリプトを再起動すると、正しいタイムゾーンが得られますか? – Dogbert
はい。それは私を混乱させるものです:-( –