2011-10-17 65 views

回答

2

注意這一點:

java.util.Date.getTime()提供從紀元毫秒,而Jython中(就像CPython的)給出秒以來的時代。因此,你需要通過1000

分從java.util.Date給出的值從Jython的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日)。

「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) 
相關問題