【问题标题】:How do I convert from an IronPython datetime to a .NET DateTime?如何从 IronPython 日期时间转换为 .NET 日期时间?
【发布时间】:2017-08-27 03:05:39
【问题描述】:

从字面上看是 this question 的反面,有没有一种简单的方法可以从 IronPython datetime 获取 .Net DateTime

显然可以

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

但这些都很混乱。这也不起作用:

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

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

【问题讨论】:

    标签: datetime ironpython


    【解决方案1】:

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

    【讨论】:

      【解决方案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) 仍然崩溃。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多