Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 8698

Show
Ignore:
Timestamp:
01/23/08 02:46:47 (5 months ago)
Author:
gbuesing
Message:

Adding Time and DateTime #formatted_offset, for outputting +HH:MM utc offset strings with cross-platform consistency

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activesupport/CHANGELOG

    r8697 r8698  
    11*SVN* 
     2 
     3* Adding Time and DateTime #formatted_offset, for outputting +HH:MM utc offset strings with cross-platform consistency [Geoff Buesing] 
    24 
    35* Adding alternate_utc_string option to TimeZone#formatted_offset. Removing unneeded TimeZone#offset. [Geoff Buesing] 
  • trunk/activesupport/lib/active_support/core_ext/date_time/conversions.rb

    r8608 r8698  
    5353        end 
    5454 
     55        # Returns the utc_offset as an +HH:MM formatted string. Examples: 
     56        # 
     57        #   datetime = DateTime.civil(2000, 1, 1, 0, 0, 0, Rational(-6, 24)) 
     58        #   datetime.formatted_offset         # => "-06:00" 
     59        #   datetime.formatted_offset(false)  # => "-0600" 
     60        def formatted_offset(colon = true, alternate_utc_string = nil) 
     61          utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon) 
     62        end 
     63         
    5564        # Overrides the default inspect method with a human readable one, e.g., "Mon, 21 Feb 2005 14:30:00 +0000" 
    5665        def readable_inspect 
  • trunk/activesupport/lib/active_support/core_ext/time/conversions.rb

    r8608 r8698  
    5656          end 
    5757        end 
     58         
     59        # Returns the utc_offset as an +HH:MM formatted string. Examples: 
     60        # 
     61        #   Time.local(2000).formatted_offset         # => "-06:00" 
     62        #   Time.local(2000).formatted_offset(false)  # => "-0600" 
     63        def formatted_offset(colon = true, alternate_utc_string = nil) 
     64          utc? && alternate_utc_string || utc_offset.to_utc_offset_s(colon) 
     65        end 
    5866 
    5967        # Convert a Time object to a Date, dropping hour, minute, and second precision. 
  • trunk/activesupport/lib/active_support/json/encoders/time.rb

    r8636 r8698  
    11class Time 
    22  def to_json(options = nil) #:nodoc: 
    3     %("#{strftime("%Y/%m/%d %H:%M:%S")} #{utc_offset.to_utc_offset_s(false)}") 
     3    %("#{strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}") 
    44  end 
    55end 
  • trunk/activesupport/test/core_ext/date_time_ext_test.rb

    r8649 r8698  
    242242    assert_equal DateTime.civil(2005, 2, 21, 9, 11, 12, 0), DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(1, 24)).utc 
    243243  end 
     244   
     245  def test_formatted_offset_with_utc 
     246    assert_equal '+00:00', DateTime.civil(2000).formatted_offset 
     247    assert_equal '+0000', DateTime.civil(2000).formatted_offset(false) 
     248    assert_equal 'UTC', DateTime.civil(2000).formatted_offset(true, 'UTC') 
     249  end 
     250   
     251  def test_formatted_offset_with_local 
     252    dt = DateTime.civil(2005, 2, 21, 10, 11, 12, Rational(-5, 24)) 
     253    assert_equal '-05:00', dt.formatted_offset 
     254    assert_equal '-0500', dt.formatted_offset(false) 
     255  end 
    244256 
    245257  protected 
  • trunk/activesupport/test/core_ext/time_ext_test.rb

    r8563 r8698  
    410410    assert Time.new.acts_like_time? 
    411411  end 
     412   
     413  def test_formatted_offset_with_utc 
     414    assert_equal '+00:00', Time.utc(2000).formatted_offset 
     415    assert_equal '+0000', Time.utc(2000).formatted_offset(false) 
     416    assert_equal 'UTC', Time.utc(2000).formatted_offset(true, 'UTC') 
     417  end 
     418   
     419  def test_formatted_offset_with_local 
     420    with_timezone 'US/Eastern' do 
     421      assert_equal '-05:00', Time.local(2000).formatted_offset 
     422      assert_equal '-0500', Time.local(2000).formatted_offset(false) 
     423      assert_equal '-04:00', Time.local(2000, 7).formatted_offset 
     424      assert_equal '-0400', Time.local(2000, 7).formatted_offset(false) 
     425    end 
     426  end 
    412427 
    413428  protected