我需要将日期转换为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()
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)