Сравниваем таймстемпы
December 15, 2014

Как то раз я нашел ошибку в сервисе Batsd, написанным Noah Lorang из компании тогда еще 37signals. И очень обрадовался, найти у ошибку у таких парней - очень почетно.
Batsd - это штука для хранения агрегированных метрик на подобии statsd, только на руби. В коде я увидел строчку, где берутся таймстемпы из текстового файла и сравниваются как строки, без конвертации в число :
File.open(filename, 'r') do |file|
while (line = file.gets)
ts, value = line.split
if ts >= start_ts && ts <= end_ts # <--- ЗДЕСЬ!
datapoints << {timestamp: ts.to_i, value: value.to_f}
end
end
file.close
end
Вот оно! - подумал я, но оказалось было рано праздновать победу.
irb(main):004:0> [Time.now, Time.now.to_i]
=> [2014-12-15 13:10:19 +0300, 1418638219]
irb(main):002:0> Time.at(1_000_000_000)
=> 2001-09-09 05:46:40 +0400
irb(main):003:0> Time.at(9_999_999_999)
=> 2286-11-20 20:46:39 +0300
Сейчас таймстемп 10-ти значный и даты, начиная c конца 2001 года, можно безболезненно сравнивать как строки.
Это конечно хак, но хак забавный.
Tweet