如何将Jython的datetime类型转换为java.util.Date?
我刚接触Jython,请问怎么把Jython中的日期时间类型转换成java.util.Date呢?
谢谢!
3 个回答
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 )
3
这是我的解决方案:
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()
3
请注意这一点:
java.util.Date.getTime() 返回的是自1970年1月1日以来的毫秒数,而Jython(和CPython一样)返回的是自1970年1月1日以来的秒数。所以你需要把从java.util.Date得到的值除以1000。
来自Jython的常见问题解答