[Jython-checkins] jython: Fixed #2504.

stefan.richthofer jython-checkins at python.org
Mon Mar 6 11:18:13 EST 2017


https://hg.python.org/jython/rev/e5f34158a59c
changeset:   8049:e5f34158a59c
user:        Stefan Richthofer <stefan.richthofer at gmx.de>
date:        Mon Mar 06 12:18:02 2017 -0400
summary:
  Fixed #2504.

files:
  Lib/datetime.py              |  9 +++++++--
  Lib/test/test_datetime_jy.py |  6 ++++--
  NEWS                         |  2 ++
  3 files changed, 13 insertions(+), 4 deletions(-)


diff --git a/Lib/datetime.py b/Lib/datetime.py
--- a/Lib/datetime.py
+++ b/Lib/datetime.py
@@ -43,6 +43,9 @@
         cal.clear()
         return cal
 
+    def _make_java_default_calendar():
+        return GregorianCalendar(0, 0, 0, 0, 0, 0)
+
     def _make_java_calendar(d):
         tzinfo = d.tzinfo
         if tzinfo == None:
@@ -1073,11 +1076,13 @@
         def __tojava__(self, java_class):
             if java_class not in (Calendar, Date, Object):
                 return Py.NoConversion
-            calendar = _make_java_utc_calendar()
-            calendar.set(self.year, self.month - 1, self.day)
             if java_class == Calendar:
+                calendar = _make_java_utc_calendar()
+                calendar.set(self.year, self.month - 1, self.day)
                 return calendar
             else:
+                calendar = _make_java_default_calendar()
+                calendar.set(self.year, self.month - 1, self.day)
                 return Date(calendar.getTimeInMillis())
 
 
diff --git a/Lib/test/test_datetime_jy.py b/Lib/test/test_datetime_jy.py
--- a/Lib/test/test_datetime_jy.py
+++ b/Lib/test/test_datetime_jy.py
@@ -6,7 +6,7 @@
 from datetime import time
 from datetime import date, datetime
 
-from java.util import Calendar, GregorianCalendar
+from java.util import Calendar, GregorianCalendar, TimeZone
 from java.sql import Date, Time, Timestamp
 
 
@@ -109,7 +109,9 @@
         x = date(2007, 1, 3)
         y = x.__tojava__(Date)
         self.assertIsInstance(y, Date)
-        self.assertEqual(y.getTime(), (x - date(1970, 1, 1)).total_seconds() * 1000)
+        # Note that java.sql.Date operates regarding to default timezone, so adjust offset
+        off = TimeZone.getDefault().getRawOffset()
+        self.assertEqual(y.getTime()+off, (x - date(1970, 1, 1)).total_seconds() * 1000)
 
     def test_time(self):
         self.assertTrue(hasattr(time, "__tojava__"))
diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@
 
 Jython 2.7.1rc1
   Bugs fixed
+    - [ 2504 ] datetime.date.__tojava__ returns incorrect dates in non-UTC timezones with
+               negative offset (Jython 2.7.0)
     - [ 2561 ] win32_ver raises exception (breaks test_platform on windows)
     - [ 2521 ] Windows installation (all) fails on Windows 10
     - [ 2557 ] ongoing pain with platform detection via os.name and sys.platform

-- 
Repository URL: https://hg.python.org/jython


More information about the Jython-checkins mailing list