首页 >> 大全

excel数字日期在python中的转换

2023-09-14 大全 21 作者:考证青年

原文代码为:

# 导入datetime模块
import datetime
# 将数值转换为日期
num = 17897
date = datetime.datetime.fromordinal(num + datetime.datetime(1900, 1, 1).toordinal() - 2)
# 输出日期
print(date.strftime("%Y-%m-%d"))

其中,原文有提到:

由于()函数将从0001年1月1日至今天的天数转换为日期,而Excel中将从1900年1月1日至今天的天数转换为数值,因此需要将num加上.(1900, 1, 1).() - 2。

但我疑惑为什么要-2?于是开始探索,最后终于发现:

_excel中日期减去日期_excel中数字转换成日期

因为我们要用已有的日期整数,加上1900/01/01这天代表的整数,而已有的日期整数其实已经包含了1900/01/01这一天,所以要减去1

例如,当什么都不减去时,数字1加上1900/01/01,得到的是1900/01/02

datetime.datetime.fromordinal(int(1) + datetime.datetime(1900, 1, 1).toordinal()).strftime("%Y/%m/%d")
'1900/01/02'

减去1之后就对应上了:

excel中数字转换成日期_excel中日期减去日期_

datetime.datetime.fromordinal(int(1) + datetime.datetime(1900, 1, 1).toordinal()-1).strftime("%Y/%m/%d")
'1900/01/01'

但是,为什么要减去2呢?我接着探索时发现,减去1并不能修正所有的日期,例如数字61在excel中是1900/03/01,但是在中转换后却是1900/03/02了:

datetime.datetime.fromordinal(int(61) + datetime.datetime(1900, 1, 1).toordinal()-1).strftime("%Y/%m/%d")
'1900/03/02'

后来多次尝试,是因为 excel 比 多了一天,这一天就是1900/02/29,而在中转化1900/02/29就会报错: day is out of range for month。查看日历,发现这一天在日历中并不存在,转换1900/0301(包含)之后的日期,excel就多了一天,就需要再减去一天才能转换为我们想要的准确日期。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了