【问题标题】:Convert date from string format to OLE automation date将日期从字符串格式转换为 OLE 自动化日期
【发布时间】:2018-04-21 14:22:20
【问题描述】:

我有一个日期字符串21-Apr-2018。如何在 python 中将此日期字符串转换为 OLE 自动化日期?我正在使用 Python v3.6。

OLE 日期的定义可以在这里找到。

https://msdn.microsoft.com/en-us/library/system.datetime.tooadate(v=vs.110).aspx

OLE 自动化日期被实现为浮点数,其 整数部分是午夜之前或之后的天数,30 1899 年 12 月,其小数部分表示时间 那一天除以 24。例如,1899 年 12 月 31 日午夜是 以 1.0 表示; 1900 年 1 月 1 日上午 6 点用 2.25 表示; 1899 年 12 月 29 日午夜,用 -1.0 表示;和早上 6 点,29 1899 年 12 月用 -1.25 表示。

基本 OLE 自动化日期是 1899 年 12 月 30 日午夜。 最小 OLE 自动化日期是 0100 年 1 月 1 日午夜。最大 OLE 自动化 Date 与 DateTime.MaxValue 相同,最后时刻 9999 年 12 月 31 日。

【问题讨论】:

    标签: python python-3.x date datetime ole


    【解决方案1】:

    至少有几种方法。您可以从 OLE 原始日期手动计算,或使用第 3 方库,例如 xlrd

    在每种情况下,您都需要将字符串转换为 datetime 对象。

    from datetime import datetime
    from xlrd import xldate
    
    def datetime2ole(date):
        date = datetime.strptime(date, '%d-%b-%Y')
        OLE_TIME_ZERO = datetime(1899, 12, 30)
        delta = date - OLE_TIME_ZERO
        return float(delta.days) + (float(delta.seconds) / 86400)  # 86,400 seconds in day
    
    def datetime2xl(date):
        date = datetime.strptime(date, '%d-%b-%Y')
        parts = ('year', 'month', 'day', 'hour', 'minute', 'second')
        components = tuple(getattr(date, x) for x in parts)
        return xldate.xldate_from_datetime_tuple(components, 0)
    
    print(datetime2ole('22-Apr-2018'))  # 43212.0
    print(datetime2xl('22-Apr-2018'))   # 43212.0
    

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2013-12-28
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多