# HG changeset patch # User fschwarz # Date 1344512680 0 # Node ID 5ba68e40d1d0801048d4f04426abe8432c4b005d # Parent 99983baf106734b3cecff0781384c2b90ea27485 format_time() and format_datetime() now accept also floats (#242) diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -51,6 +51,7 @@ attributes (language, territory, script, variant) are equal * resort to hard-coded message extractors/checkers if pkg_resources is installed but no egg-info was found (#230) + * format_time() and format_datetime() now accept also floats (#242) Version 0.9.6 diff --git a/babel/dates.py b/babel/dates.py --- a/babel/dates.py +++ b/babel/dates.py @@ -488,7 +488,7 @@ """ if datetime is None: datetime = datetime_.utcnow() - elif isinstance(datetime, (int, long)): + elif isinstance(datetime, (int, long, float)): datetime = datetime_.utcfromtimestamp(datetime) elif isinstance(datetime, time): datetime = datetime_.combine(date.today(), datetime) @@ -572,7 +572,7 @@ """ if time is None: time = datetime.utcnow() - elif isinstance(time, (int, long)): + elif isinstance(time, (int, long, float)): time = datetime.utcfromtimestamp(time) if time.tzinfo is None: time = time.replace(tzinfo=UTC) diff --git a/babel/tests/dates.py b/babel/tests/dates.py --- a/babel/tests/dates.py +++ b/babel/tests/dates.py @@ -11,6 +11,7 @@ # individuals. For the exact contribution history, see the revision # history and logs, available at http://babel.edgewall.org/log/. +import calendar from datetime import date, datetime, time, timedelta import doctest import new @@ -241,6 +242,16 @@ self.assertEqual('14', dates.format_date(d, 'w', locale='en_US')) +class FormatDatetimeTestCase(unittest.TestCase): + + def test_with_float(self): + d = datetime(2012, 4, 1, 15, 30, 29, tzinfo=timezone('UTC')) + epoch = float(calendar.timegm(d.timetuple())) + formatted_string = dates.format_datetime(epoch, format='long', locale='en_US') + self.assertEqual(u'April 1, 2012 3:30:29 PM +0000', formatted_string) + + + class FormatTimeTestCase(unittest.TestCase): def test_with_naive_datetime_and_tzinfo(self): @@ -249,6 +260,13 @@ locale='en') self.assertEqual('11:30:00 AM EDT', string) + def test_with_float(self): + d = datetime(2012, 4, 1, 15, 30, 29, tzinfo=timezone('UTC')) + epoch = float(calendar.timegm(d.timetuple())) + formatted_time = dates.format_time(epoch, format='long', locale='en_US') + self.assertEqual(u'3:30:29 PM +0000', formatted_time) + + def test_with_date_fields_in_pattern(self): self.assertRaises(AttributeError, dates.format_time, date(2007, 04, 01), "yyyy-MM-dd HH:mm", locale='en_US') @@ -297,6 +315,7 @@ suite.addTest(doctest.DocTestSuite(dates)) suite.addTest(unittest.makeSuite(DateTimeFormatTestCase)) suite.addTest(unittest.makeSuite(FormatDateTestCase)) + suite.addTest(unittest.makeSuite(FormatDatetimeTestCase)) suite.addTest(unittest.makeSuite(FormatTimeTestCase)) suite.addTest(unittest.makeSuite(FormatTimedeltaTestCase)) suite.addTest(unittest.makeSuite(TimeZoneAdjustTestCase))