Как конвертировать тип datetime (из Jython) в java.util.Date? - PullRequest
1 голос
/ 17 октября 2011

Я новичок в Jython, как конвертировать тип datetime (из Jython) в java.util.Date?

спасибо.

Ответы [ 3 ]

2 голосов
/ 10 августа 2012

Вот мое решение:

from java.util import Calendar, GregorianCalendar

def datetimeToJavaDate(value):
    cal = GregorianCalendar(value.year, value.month - 1, value.day, 
        value.hour, value.minute, value.second)
    cal.set (Calendar.MILLISECOND, value.microsecond / 1000)
    return cal.getTime()
2 голосов
/ 17 октября 2011

Знайте об этом:

java.util.Date.getTime () дает миллисекунды с начала эпохи, в то время как Jython (так же, как CPython) дает секунды с начала эпохи. Поэтому вам нужно разделить значения, данные из java.util.Date, на 1000

.

Из Jython FAQ

0 голосов
/ 04 октября 2015

Я немного поэкспериментировал и поэкспериментировал с этим ... эти два метода я использую для преобразования в java.sql.Timestamp, а затем в другом направлении, используя java.sql.Timestamp.time ( ) (мс с 01.01.1970).

«bst» здесь означает «британское летнее время» ... Я проверял, правильно ли он учитывал такие даты: то есть может показаться, что модуль tz достаточно умен, чтобы иметь возможность обнаруживать эти месяцы в течение Летом подлежат BST и корректируются соответственно.

Надеюсь, он будет работать с любыми другими часовыми поясами, которые можно в него бросить ...

def convert_datetime_bst_to_javaSQLTimestamp( datetime_val ):
    if datetime_val is None: return None
    assert type( datetime_val ) is datetime.datetime
    tz_local = tz.tzlocal()
    gmt_datetime = datetime_val - tz_local.dst( datetime_val )
    delta = gmt_datetime - datetime.datetime( 1970, 1, 1 )
    seconds = int( delta.total_seconds() ) 
    ms_fraction = int( delta.microseconds / 1000 )
    ms = seconds * 1000 + ms_fraction
    return java.sql.Timestamp( ms )

def conv_ms_to_datetime_bst( ms ):
    assert type( ms ) is long, '# ms type %s' % ( type( ms ), )
    # NB potentially a problem with pre-1970 and post-2038 dates: datetime.datetime.fromtimestamp(ms/1000.0)
    gmt_datetime = datetime.datetime( 1970, 1, 1 ) + datetime.timedelta( 0, 0, 0, ms )
    tz_local = tz.tzlocal()
    return gmt_datetime + tz_local.dst( gmt_datetime )
...