Changeset 234


Ignore:
Timestamp:
10/04/06 03:42:50 (8 years ago)
Author:
xi
Message:

Fix loss of microsecond precision in datetime.datetime constructor (fix #30).
Thanks to edemaine@… for the bug report and the patch.

Location:
pyyaml/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • pyyaml/trunk/lib/yaml/constructor.py

    r225 r234  
    301301                :(?P<minute>[0-9][0-9]) 
    302302                :(?P<second>[0-9][0-9]) 
    303                 (?:(?P<fraction>\.[0-9]*))? 
     303                (?:\.(?P<fraction>[0-9]*))? 
    304304                (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?) 
    305305                (?::(?P<tz_minute>[0-9][0-9]))?))?)?$''', re.X) 
     
    319319        fraction = 0 
    320320        if values['fraction']: 
    321             fraction = int(float(values['fraction'])*1000000) 
     321            fraction = int(values['fraction'][:6].ljust(6, '0')) 
    322322        delta = None 
    323323        if values['tz_sign']: 
  • pyyaml/trunk/tests/data/timestamp-bugs.code

    r225 r234  
    55    datetime.datetime(2001, 12, 14, 21, 59, 43, 0, FixedOffset(60, "+1")), 
    66    datetime.datetime(2001, 12, 14, 21, 59, 43, 0, FixedOffset(-90, "-1:30")), 
     7    datetime.datetime(2005, 7, 8, 17, 35, 4, 517600), 
    78] 
  • pyyaml/trunk/tests/data/timestamp-bugs.data

    r225 r234  
    44- 2001-12-14 21:59:43+1 
    55- 2001-12-14 21:59:43-1:30 
     6- 2005-07-08 17:35:04.517600 
  • pyyaml/trunk/tests/test_constructor.py

    r225 r234  
    289289                                (item2 != item2 or (item2 == 0.0 and item2 == 1.0)): 
    290290                            continue 
     291                        if isinstance(item1, datetime.datetime) \ 
     292                                and isinstance(item2, datetime.datetime): 
     293                            self.failUnlessEqual(item1.microsecond, 
     294                                    item2.microsecond) 
    291295                        if isinstance(item1, datetime.datetime): 
    292296                            item1 = item1.utctimetuple() 
  • pyyaml/trunk/tests/test_representer.py

    r225 r234  
    3737                                (item2 != item2 or (item2 == 0.0 and item2 == 1.0)): 
    3838                            continue 
     39                        if isinstance(item1, datetime.datetime) \ 
     40                                and isinstance(item2, datetime.datetime): 
     41                            self.failUnlessEqual(item1.microsecond, 
     42                                    item2.microsecond) 
    3943                        if isinstance(item1, datetime.datetime): 
    4044                            item1 = item1.utctimetuple() 
Note: See TracChangeset for help on using the changeset viewer.