我需要将日期读取为 UTC unix 时间戳整数。然后使用它,对其进行一些日期计算。
我编写了一个 Rails 应用程序和一个模仿我的环境的规范。
https://github.com/dlikhten/semaphoretests/blob/master/spec/time/test_time.rb
require 'spec_helper'
describe "time testing" do
base_time = Time.new("2012")
8760.times do |n|
context "#{n + 1} hour offset" do
let(:now) { base_time + (n + 1).hours }
before { Timecop.freeze(now) }
after { Timecop.return }
it do
# puts now.to_s
t1 = 30.days.from_now.utc.to_i
# puts t1
d1 = Time.at(t1).to_date
# puts d1
d2 = 30.days.from_now.to_date
# puts d2
# puts 30.days.from_now.to_date
d1.should == 30.days.from_now.to_date
d2.should == 30.days.from_now.to_date
d1.should == d2
end
end
end
end
谁能告诉我为什么这个规范失败了?这会尝试为一年中的每个小时运行逻辑。在某些小时它会失败。
有趣的是,我每天有几次计算 1 天假。为什么会发生这种情况是没有意义的。请注意,我执行 Timecop.freeze 以确保生成的所有日期都是相同的时间戳。
从理论上讲,它应该已经在所有情况下都在正确的时区上运行。
红宝石 1.9.2 轨道 3.2.6