mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Move Numeric#to_utc_offset_s to TimeZone.seconds_to_utc_offset
This commit is contained in:
@@ -56,7 +56,7 @@ module ActiveSupport #:nodoc:
|
||||
# datetime.formatted_offset # => "-06:00"
|
||||
# datetime.formatted_offset(false) # => "-0600"
|
||||
def formatted_offset(colon = true, alternate_utc_string = nil)
|
||||
utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
|
||||
utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon)
|
||||
end
|
||||
|
||||
# Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005 14:30:00 +0000"
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
class Numeric
|
||||
UTC_OFFSET_WITH_COLON = '%+03d:%02d'
|
||||
UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '')
|
||||
|
||||
# Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset)
|
||||
# and turns this into an +HH:MM formatted string. Example:
|
||||
#
|
||||
# -21_600.to_utc_offset_s # => "-06:00"
|
||||
def to_utc_offset_s(colon = true)
|
||||
format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON
|
||||
hours = self / 3600
|
||||
minutes = (abs % 3600) / 60
|
||||
format % [hours, minutes]
|
||||
end
|
||||
end
|
||||
@@ -54,7 +54,7 @@ module ActiveSupport #:nodoc:
|
||||
# Time.local(2000).formatted_offset # => "-06:00"
|
||||
# Time.local(2000).formatted_offset(false) # => "-0600"
|
||||
def formatted_offset(colon = true, alternate_utc_string = nil)
|
||||
utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
|
||||
utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon)
|
||||
end
|
||||
|
||||
# Converts a Time object to a Date, dropping hour, minute, and second precision.
|
||||
|
||||
@@ -87,7 +87,7 @@ module ActiveSupport
|
||||
alias_method :gmtoff, :utc_offset
|
||||
|
||||
def formatted_offset(colon = true, alternate_utc_string = nil)
|
||||
utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
|
||||
utc? && alternate_utc_string || TimeZone.seconds_to_utc_offset(utc_offset, colon)
|
||||
end
|
||||
|
||||
# Time uses +zone+ to display the time zone abbreviation, so we're duck-typing it.
|
||||
|
||||
@@ -170,6 +170,20 @@ module ActiveSupport
|
||||
MAPPING.freeze
|
||||
end
|
||||
|
||||
UTC_OFFSET_WITH_COLON = '%+03d:%02d'
|
||||
UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '')
|
||||
|
||||
# Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset)
|
||||
# and turns this into an +HH:MM formatted string. Example:
|
||||
#
|
||||
# TimeZone.seconds_to_utc_offset(-21_600) # => "-06:00"
|
||||
def self.seconds_to_utc_offset(seconds, colon = true)
|
||||
format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON
|
||||
hours = seconds / 3600
|
||||
minutes = (seconds.abs % 3600) / 60
|
||||
format % [hours, minutes]
|
||||
end
|
||||
|
||||
include Comparable
|
||||
attr_reader :name
|
||||
|
||||
@@ -190,7 +204,7 @@ module ActiveSupport
|
||||
# Returns the offset of this time zone as a formatted string, of the
|
||||
# format "+HH:MM".
|
||||
def formatted_offset(colon=true, alternate_utc_string = nil)
|
||||
utc_offset == 0 && alternate_utc_string || utc_offset.to_utc_offset_s(colon)
|
||||
utc_offset == 0 && alternate_utc_string || self.class.seconds_to_utc_offset(utc_offset, colon)
|
||||
end
|
||||
|
||||
# Compare this time zone to the parameter. The two are comapred first on
|
||||
|
||||
@@ -145,18 +145,3 @@ class NumericExtSizeTest < Test::Unit::TestCase
|
||||
assert_equal 3458764513820540928, 3.exabyte
|
||||
end
|
||||
end
|
||||
|
||||
class NumericExtConversionsTest < Test::Unit::TestCase
|
||||
|
||||
def test_to_utc_offset_s_with_colon
|
||||
assert_equal "-06:00", -21_600.to_utc_offset_s
|
||||
assert_equal "+00:00", 0.to_utc_offset_s
|
||||
assert_equal "+05:00", 18_000.to_utc_offset_s
|
||||
end
|
||||
|
||||
def test_to_utc_offset_s_without_colon
|
||||
assert_equal "-0600", -21_600.to_utc_offset_s(false)
|
||||
assert_equal "+0000", 0.to_utc_offset_s(false)
|
||||
assert_equal "+0500", 18_000.to_utc_offset_s(false)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -196,6 +196,18 @@ class TimeZoneTest < Test::Unit::TestCase
|
||||
assert_equal(-18_000, zone.utc_offset)
|
||||
end
|
||||
|
||||
def test_seconds_to_utc_offset_with_colon
|
||||
assert_equal "-06:00", TimeZone.seconds_to_utc_offset(-21_600)
|
||||
assert_equal "+00:00", TimeZone.seconds_to_utc_offset(0)
|
||||
assert_equal "+05:00", TimeZone.seconds_to_utc_offset(18_000)
|
||||
end
|
||||
|
||||
def test_seconds_to_utc_offset_without_colon
|
||||
assert_equal "-0600", TimeZone.seconds_to_utc_offset(-21_600)
|
||||
assert_equal "+0000", TimeZone.seconds_to_utc_offset(0)
|
||||
assert_equal "+0500", TimeZone.seconds_to_utc_offset(18_000)
|
||||
end
|
||||
|
||||
def test_formatted_offset_positive
|
||||
zone = ActiveSupport::TimeZone['Moscow']
|
||||
assert_equal "+03:00", zone.formatted_offset
|
||||
|
||||
Reference in New Issue
Block a user