小编典典

如何将python datetime.datetime转换为Excel序列号

python

我需要将日期转换为Excel序列号,以用于编写的数据处理脚本。通过在OpenOffice Calc工作簿中使用日期,我可以推断出“ 1-Jan 1899
00:00:00”映射到数字零。

我编写了以下函数,以将python datetime对象转换为Excel序列号:

def excel_date(date1):
    temp=dt.datetime.strptime('18990101', '%Y%m%d')
    delta=date1-temp
    total_seconds = delta.days * 86400 + delta.seconds
    return total_seconds

但是,当我尝试一些示例日期时,数字与在Excel(以及OpenOffice Calc)中将日期格式设置为数字时得到的数字不同。例如,在Python中测试“
2009-03-20”可获得3478032000,而excel将序列号呈现为39892。

上面的公式有什么问题?

*注意:我使用的是Python 2.6.3,因此无法访问datetime.total_seconds()


阅读 206

收藏
2020-12-20

共1个答案

小编典典

Excel的“序列日期”格式似乎实际上是自1900-01-00以来的
数,其分数部分是一天的一小部分,基于http://www.cpearson.com/excel/datetime。
htm。(我猜该日期实际上应该被认为是1899-12-31,因为不存在一个月的第0天)

因此,似乎应该是:

def excel_date(date1):
    temp = dt.datetime(1899, 12, 30)    # Note, not 31st Dec but 30th!
    delta = date1 - temp
    return float(delta.days) + (float(delta.seconds) / 86400)
2020-12-20