--- /home/astocker/jython_datetime_fix/cur/datetime.py +++ /home/astocker/jython_datetime_fix/fix/datetime.py @@ -20,6 +20,14 @@ import time as _time import math as _math import struct as _struct +import sys as _sys + +if _sys.platform.startswith('java'): + from java.lang import Object + from java.sql import Date, Timestamp, Time + from java.util import Calendar + from org.python.core import Py + def _cmp(x, y): return 0 if x == y else 1 if x > y else -1 @@ -1026,6 +1034,20 @@ def __reduce__(self): return (self.__class__, self._getstate()) + if _sys.platform.startswith('java'): + def __tojava__(self, java_class): + if java_class not in (Calendar, Date, Object): + return Py.NoConversion + + calendar = Calendar.getInstance() + calendar.clear() + calendar.set(self.year, self.month - 1, self.day) + if java_class == Calendar: + return calendar + else: + return Date(calendar.getTimeInMillis()) + + _date_class = date # so functions w/ args named "date" can get at the class date.min = date(1, 1, 1) @@ -1430,6 +1452,24 @@ def __reduce__(self): return (time, self._getstate()) + + if _sys.platform.startswith('java'): + def __tojava__(self, java_class): + # TODO, if self.tzinfo is not None, convert time to UTC + if java_class not in (Calendar, Time, Object): + return Py.NoConversion + + calendar = Calendar.getInstance() + calendar.clear() + calendar.set(Calendar.HOUR_OF_DAY, self.hour) + calendar.set(Calendar.MINUTE, self.minute) + calendar.set(Calendar.SECOND, self.second) + calendar.set(Calendar.MILLISECOND, self.microsecond // 1000) + if java_class == Calendar: + return calendar + else: + return Time(calendar.getTimeInMillis()) + _time_class = time # so functions w/ args named "time" can get at the class @@ -1928,6 +1968,25 @@ def __reduce__(self): return (self.__class__, self._getstate()) + if _sys.platform.startswith('java'): + def __tojava__(self, java_class): + # TODO, if self.tzinfo is not None, convert time to UTC + if java_class not in (Calendar, Timestamp, Object): + return Py.NoConversion + + calendar = Calendar.getInstance() + calendar.clear() + calendar.set(self.year, self.month - 1, self.day, + self.hour, self.minute, self.second) + + if java_class == Calendar: + calendar.set(Calendar.MILLISECOND, self.microsecond // 1000) + return calendar + else: + timestamp = Timestamp(calendar.getTimeInMillis()) + timestamp.setNanos(self.microsecond * 1000) + return timestamp + datetime.min = datetime(1, 1, 1) datetime.max = datetime(9999, 12, 31, 23, 59, 59, 999999)