如何将IronPython日期时间转换为.NET日期时间?
问题描述:
字面上this question的倒数,有没有简单的方法从IronPython获得.Net DateTime
datetime
?如何将IronPython日期时间转换为.NET日期时间?
显然,人们可以
- 输出字符串和解析它或
- 转储所有的日期部分为
DateTime
构造
但这些都是凌乱。这不起作用或者:
pydate = datetime.datetime.now()
csharp = DateTime(pydate) # Crashes, because .Net wants a 'long' for Ticks
有一个简单的铸件或短的方式来获得的。NET希望Ticks
?
答
现在2.7.6 has been released,您可以使用clr.Convert
作出明确的转换,如果需要的话。有可能是更好的方式来做到这一点,但我偷Jeff Hardy'scommit.
>>> from System import DateTime
>>> from datetime import datetime
>>> from clr import Convert
>>> now_py = datetime.now()
>>> now_py
datetime.datetime(2020, 1, 1, 18, 28, 34, 598000)
>>> Convert(now_py, DateTime)
<System.DateTime object at 0x00000000006C [1/1/2020 6:28:34 PM]>
>>> now_py == Convert(now_py, DateTime)
True
DateTime(pydate)
仍然崩溃这一个。
答
我非常确定已经允许直接转换,但我错了。我在31f5c88中加入了它,但是直到(当前未计划)2.7.6才可用。
在此期间,最好的办法是使用timetuple
方法来获取部分:
dt = datetime.now()
d = DateTime(*dt.timetuple()[:6])
# For UTC times, you need to pass 'kind' as a kwarg
# because of Python's rules around using * unpacking
udt = datetime.now()
ud = DateTime(*udt.timetuple()[:6], kind=DateTimeKind.Utc)
答
Jeff's answer得到一个DateTime
到第二。如果你想舒展精确到毫秒,你可以使用这样的事情:
def cs_date(date):
return DateTime(*date.timetuple()[:6] + (date.microsecond/1000,))