2015-04-22 194 views
4

字面上this question的倒數,有沒有簡單的方法從IronPython獲得.Net DateTimedatetime如何將IronPython日期時間轉換爲.NET日期時間?

顯然,人們可以

  • 輸出字符串和解析它或
  • 轉儲所有的日期部分爲DateTime構造

但這些都是凌亂。這不起作用或者:

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

有一個簡單的鑄件或短的方式來獲得的。NET希望Ticks

回答

2

現在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)仍然崩潰這一個。

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) 
1

Jeff's answer得到一個DateTime到第二。如果你想舒展精確到毫秒,你可以使用這樣的事情:

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