2011-10-17 3 views

답변

2
이 알고 있어야

:

java.util.Date.getTime() (단지 CPython과 같은) 자이 썬은 시대 이후 초를 제공하면서 시대 이후 밀리 초를 제공합니다. 그래서 당신은 1000

에 의해 java.util.Date에서 주어진 값을 분할해야 자이 썬의 FAQ

2
여기

내 솔루션입니다 : 내가 장난과 실험의 비트를했다

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() 
+0

어떻게 시간대를 지원하는 것? – wberry

0

이 두 가지 방법은 java.sql.Timestamp로 변환 한 다음 다른 방향으로 java.sql.Timestamp.time() (1970 년 1 월 1 일부터 ms)을 사용하여 내가 사용하는 방법입니다.

여기서 "bst"는 British Summer Time을 나타냅니다 ... 그 당시에는 그러한 날짜를 올바르게 고려했는지 확인했습니다. 즉, 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) 
관련 문제