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

Mic*_*ael 6 datetime ironpython

字面意思是这个问题的反面,是否有一种DateTime从IronPython 获得.Net的简单方法datetime

显然,人们可以

  • 输出一个字符串并解析它或
  • 将所有日期部分转储到DateTime构造函数中

但那些都是凌乱的.这也不起作用:

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

有没有一个简单的演员或简短的方法来获得Ticks.Net想要的?

Jef*_*rdy 5

我很确定已经允许直接转换,但我错了.我在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)
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 3

现在2.7.6 已经发布,如果需要,您可以用来clr.Convert进行显式转换。可能有更好的方法来做到这一点,但我从Jeff Hardy 的 提交中窃取了这个方法。

>>> 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
Run Code Online (Sandbox Code Playgroud)

DateTime(pydate)仍然崩溃。