如何将 IronPython 日期时间转换为 .NET DateTime?

How do I convert from an IronPython datetime to a .NET DateTime?

从字面上看是 this question 的倒数,是否有从 IronPython datetime 获取 .Net DateTime 的简单方法?

显然,可以

但那些都是乱七八糟的。这也不起作用:

pydate = datetime.datetime.now()
csharp = DateTime(pydate) # Crashes, because .Net wants a 'long' for Ticks

是否有简单的转换或捷径来获得 .Net 想要的 Ticks

我相当确定已经允许直接转换,但我错了。我在 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)

获得第二个 DateTime。如果你想将精度扩展到毫秒,你可以使用这样的东西:

def cs_date(date):
    return DateTime(*date.timetuple()[:6] + (date.microsecond/1000,))

现在2.7.6 has been released, you can use clr.Convert to make an explicit cast, if needed. There could be better ways to do this, but I'm stealing this one from Jeff Hardy's commit.

>>> 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) 仍然崩溃。