Skip to content
Browse files

`DateTime#to_f` now preserves fractional seconds.

Previously this method always returns `.0` in the fractional part. This commit
changes it to preserve the fractional seconds instead.

Fixes #15994.
  • Loading branch information...
1 parent a410427 commit d75992b0b22b656d16a28c04eac771a93486f465 @johnpaulashenfelter johnpaulashenfelter committed with chancancode Jul 1, 2014
7 activesupport/
@@ -1,3 +1,10 @@
+* `DateTime#to_f` now preserves the fractional seconds instead of always
+ rounding to `.0`.
+ Fixes #15994.
+ *John Paul Ashenfelter*
* Add `Hash#transform_values` to simplify a common pattern where the values of a
hash must change, but the keys are left the same.
4 activesupport/lib/active_support/core_ext/date_time/conversions.rb
@@ -71,9 +71,9 @@ def self.civil_from_format(utc_or_local, year, month=1, day=1, hour=0, min=0, se
civil(year, month, day, hour, min, sec, offset)
- # Converts +self+ to a floating-point number of seconds since the Unix epoch.
+ # Converts +self+ to a floating-point number of seconds, including fractional microseconds, since the Unix epoch.
def to_f
- seconds_since_unix_epoch.to_f
+ seconds_since_unix_epoch.to_f + sec_fraction
# Converts +self+ to an integer number of seconds since the Unix epoch.
1 activesupport/test/core_ext/date_time_ext_test.rb
@@ -338,6 +338,7 @@ def test_compare_with_time_with_zone
def test_to_f
assert_equal 946684800.0, DateTime.civil(2000).to_f
assert_equal 946684800.0, DateTime.civil(1999,12,31,19,0,0,Rational(-5,24)).to_f
+ assert_equal 946684800.5, DateTime.civil(1999,12,31,19,0,0.5,Rational(-5,24)).to_f
def test_to_i

0 comments on commit d75992b

Please sign in to comment.
Something went wrong with that request. Please try again.