python - 将 0001 年 1 月 1 日转换为时间库的时间戳
问题描述
通过python,我尝试计算从9999年12月31日到0001年1月1日的天数
import time
def days_diff(a, b):
timestr_1 = "{}, {}, {}".format(a[0], a[1], a[2])
time_1 = time.strptime(timestr_1, "%Y, %m, %d")
timestr_2 = "{}, {}, {}".format(b[0], b[1], b[2])
time_2 = time.strptime(timestr_2, "%Y, %m, %d")
return int(abs(time.mktime(time_2) - time.mktime(time_1)) // 86400)
if __name__ == '__main__':
print("Example:")
print(days_diff((1, 1, 1), (9999, 12, 31)))
但
ValueError: time data '1, 1, 1' does not match
format '%Y, %m, %d'
解决方案
%Y
, %m
&%d
期望数字的长度分别为 4、2 和 2。您可以通过以下方式解决该问题:
import time
def padder(n, length):
return str(n).zfill(length)
def days_diff(a, b):
a = [padder(n,length) for n,length in zip(a,(4,2,2))]
b = [padder(n,length) for n,length in zip(b,(4,2,2))]
timestr_1 = "{}, {}, {}".format(a[0], a[1], a[2])
time_1 = time.strptime(timestr_1, "%Y, %m, %d")
timestr_2 = "{}, {}, {}".format(b[0], b[1], b[2])
time_2 = time.strptime(timestr_2, "%Y, %m, %d")
return int(abs(time.mktime(time_2) - time.mktime(time_1)) // 86400)
if __name__ == '__main__':
print("Example:")
print(days_diff((1, 1, 1), (9999, 12, 31)))
但这不起作用(你得到一个OverflowError
),因为 mktime 不支持日期范围。
相反,请尝试使用datetime.datetime
:
import datetime as dt
def days_diff(a, b):
time_1 = dt.datetime(*a)
time_2 = dt.datetime(*b)
diff = time_2-time_1
return diff.days * 24 * 3600 + diff.seconds
if __name__ == '__main__':
print("Example:")
print(days_diff((1, 1, 1), (9999, 12, 31)))
推荐阅读
- c++ - C++ 在同一进程中获取另一个 Windows Hwnd
- linux - 从 find 命令中删除输出 - Shell
- python - 有没有办法从 PyTorch 中删除未使用的文件以运行它的轻量版?
- sql - 如何在sql上仅显示唯一的发票编号
- r - 列表中的滞后行
- spring - 如何在取消部署/重新部署时关闭 ConnectionProvider 的连接?
- excel - 根据条件复制/粘贴单元格范围 x 次
- javascript - 无论我在下拉框中选择什么,只要我按 Enter,它只会给出相同的字体
- excel - VBA循环不适用于递归人员
- python - 二进制交叉熵输出,如何读取输出?