From: Felix Schwarz Date: Thu, 9 Aug 2012 11:44:40 +0000 (+0000) Subject: format_time() and format_datetime() now accept also floats (#242) X-Git-Tag: 1.0~153 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77bdd38f73f831956ee9e51924fd9e19ebfcb0d7;p=thirdparty%2Fbabel.git format_time() and format_datetime() now accept also floats (#242) --- diff --git a/ChangeLog b/ChangeLog index 9fd2e8c0..f6b8a78e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -51,6 +51,7 @@ http://svn.edgewall.org/repos/babel/tags/1.0.0/ 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 index aa021b1a..9c008bc9 100644 --- a/babel/dates.py +++ b/babel/dates.py @@ -488,7 +488,7 @@ def format_datetime(datetime=None, format='medium', tzinfo=None, """ 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 @@ def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): """ 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 index fa45a860..457a17f0 100644 --- 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 @@ class FormatDateTestCase(unittest.TestCase): 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 @@ class FormatTimeTestCase(unittest.TestCase): 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 @@ def suite(): 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))