날짜를 UTC 유닉스 타임 스탬프 정수로 읽어야합니다. 그런 다음 그것을 사용하여 날짜 계산을하십시오.Ruby/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
? 어쩌면이 건축은 많은 기억을 소비합니까? – megas
Timecop.return의 의미는 무엇입니까? return은 키워드이고 메서드는 될 수 없습니다. – megas
@megas'return' *는 명시적인 리시버로 항상 호출되는 한 메서드 이름으로 사용할 수 있습니다. – Kelvin