提交 822c858a 编写于 作者: A Andrew White

Improve performance of DateTime#seconds_since_unix_epoch

Calculate the seconds since the UNIX epoch using the difference in
Julian day numbers from the epoch date. By reducing the Rational math
to just the offset component this gives a significant improvement.

Benchmark:

Calculating --------------------------------------------
       new     27733 i/100ms
   current     15031 i/100ms
       new     27737 i/100ms
   current     15549 i/100ms
--------------------------------------------------------
       new   548182.1 (±0.9%) i/s - 2745567 in 5.008943s
   current   216380.9 (±1.6%) i/s - 1082232 in 5.002781s
       new   510281.9 (±1.2%) i/s - 2551804 in 5.001525s
   current   219858.3 (±1.8%) i/s - 1103979 in 5.023039s
上级 83302a4c
......@@ -80,8 +80,11 @@ def to_i
private
def offset_in_seconds
(offset * 86400).to_i
end
def seconds_since_unix_epoch
seconds_per_day = 86_400
(self - ::DateTime.civil(1970)) * seconds_per_day
(jd - 2440588) * 86400 - offset_in_seconds + seconds_since_midnight
end
end
......@@ -427,6 +427,7 @@ def test_to_f
def test_to_i
assert_equal 946684800, DateTime.civil(2000).to_i
assert_equal 946684800, DateTime.civil(1999,12,31,19,0,0,Rational(-5,24)).to_i
end
protected
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册