如何将 IronPython 日期时间转换为 .NET DateTime?
How do I convert from an IronPython datetime to a .NET DateTime?
从字面上看是 this question 的倒数,是否有从 IronPython datetime
获取 .Net DateTime
的简单方法?
显然,可以
- 输出一个字符串并解析它或
- 将所有日期部分转储到
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)
仍然崩溃。
从字面上看是 this question 的倒数,是否有从 IronPython datetime
获取 .Net DateTime
的简单方法?
显然,可以
- 输出一个字符串并解析它或
- 将所有日期部分转储到
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)
仍然崩溃。