0

我需要将日期读取为 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

4

1 回答 1

0

将您的替换to_ito_f.

小数秒截断可能会产生影响。不知道为什么会这样。

to_f或者,为了获得更好的性能,而不是在循环中调用,从base_time:

base_time = Time.at(Time.new('2012').to_i)
于 2012-09-14T22:20:24.037 回答