2010-08-18 3 views
0

Я хочу взять текущее время и сохранить его в хэше, а затем, когда я его проверю, сравните текущее время с сохраненным временем.ruby ​​hash storage

t1 =Time.now 
time = "#{t1.hour}" + "#{t1.min}" + "#{t1.sec}" 
oldtime = Hash.new(time) 
puts "Old time is #{oldtime}" 
puts "Current is #{time}" 

Благодарим за помощь!

+0

Реализация в сторону, что вы пытаетесь сделать? –

+0

Если время изменится, сохраните время и новое время, тогда я запустил новую программу. – rahrahruby

+0

Я закодировал в других программах, где вы могли сохранить значение в хеше и повторно использовать его по мере необходимости. Просто не знаю, как это сделать в Ruby. – rahrahruby

ответ

0

Ваши t1 и time переменные не изменятся. Time.now дает моментальный снимок того, что текущее время, но по прошествии времени предыдущие переменные, которым было присвоено значение Time.now, будут по-прежнему иметь то же значение, что и при их установке. Ввод значения времени внутри хэша не будет иметь никакого значения.

Если вы хотите проверить это время, вам нужно будет снова получить Time.now.

t1 = Time.now 
# ... time passes 
t2 = Time.now 

# Now you can compare t2 to t1 to see how much time elapsed. 
+0

Я думаю, что время было плохим выбором с моей стороны. То, что я пытаюсь сделать, - это проанализировать временную метку файла в моей файловой системе. Я продолжаю проверять до тех пор, пока это не изменится, и когда я это сделаю, я вызываю другую программу. Не знаете, как сохранить исходное значение при следующей проверке для целей сравнения. – rahrahruby

+0

- это автономная программа или она на рельсах? – kriss

0

Зачем конвертировать в строку? Вы вводите ошибки, так как время 10:05:02 преобразуется в «1052» с вашим кодом.

Вместо хранить объект времени непосредственно:

timestamps = {} 
timestamps['old'] = Time.now 
... more code ... 
timestamps['new'] = Time.now 

puts "Old time is: " + timestamps['old'].to_s 
puts "New time is: " + timestamps['new'].to_s 

Если вы хотите сравнить отметки времени, вы можете использовать оператор космического корабля, как:

timestamps['old'] <=> timestamps['new'] 
0
last_filetime = nil 
while true 
    filetime = file.timestamp 
    call_other_process if last_filetime and filetime != last_filetime 
    last_filetime = filetime 
    pause 10 
end 

ли эта помощь?