计算从今天开始过了多少天

Calculating how many days passed from today

我有问题。我正在尝试迭代 100 多个日期,计算到达该日期需要经过多少天,然后打印出来。问题是在 41 之后,没有 42,而是 41.958333333333336。我猜这是一个 python 数学错误、时间偏移,或者只是我的错误。我不确定,所以有人知道为什么会这样吗?

代码:

#!/bin/python
import time
from datetime import date

#Getting today's (without hours and minutes) date in unix time.
today=time.mktime(date.today().timetuple())

day=14
month=2

for _ in range(100):
    #Calculating timestamp from today to the date that we're iterating over.
    print((time.mktime(date(2022,month,day).timetuple())-today)/86400)
        
    #Month jumping conditions
    if month==2 and day==28:
        day=1
        month+=1
    elif month<=7 and month%2==1 and day==31:
        day=1
        month+=1
    elif month>=8 and month%2==0 and day==31:
        day=1
        month+=1
    elif month<=7 and month%2==0 and day==30:
        day=1
        month+=1
    elif month>=8 and month%2==1 and day==30:
        day=1
        month+=1
    else:
        day+=1

输出:

0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
11.0
12.0
13.0
14.0
15.0
16.0
17.0
18.0
19.0
20.0
21.0
22.0
23.0
24.0
25.0
26.0
27.0
28.0
29.0
30.0
31.0
32.0
33.0
34.0
35.0
36.0
37.0
38.0
39.0
40.0
41.0
41.958333333333336
42.958333333333336
43.958333333333336
44.958333333333336
45.958333333333336
46.958333333333336
47.958333333333336
48.958333333333336
49.958333333333336
50.958333333333336
51.958333333333336
52.958333333333336
53.958333333333336
54.958333333333336
55.958333333333336
56.958333333333336
57.958333333333336
58.958333333333336
59.958333333333336
60.958333333333336
61.958333333333336
62.958333333333336
63.958333333333336
64.95833333333333
65.95833333333333
66.95833333333333
67.95833333333333
68.95833333333333
69.95833333333333
70.95833333333333
71.95833333333333
72.95833333333333
73.95833333333333
74.95833333333333
75.95833333333333
76.95833333333333
77.95833333333333
78.95833333333333
79.95833333333333
80.95833333333333
81.95833333333333
82.95833333333333
83.95833333333333
84.95833333333333
85.95833333333333
86.95833333333333
87.95833333333333
88.95833333333333
89.95833333333333
90.95833333333333
91.95833333333333
92.95833333333333
93.95833333333333
94.95833333333333
95.95833333333333
96.95833333333333
97.95833333333333
98.95833333333333

time.mktime 是相对于时区的,所以 returned 时间可能不明确。它可能 return 一个意外的结果取决于时间段,特别是因为 DST 转换期间的时间变化。

Convert a time tuple in local time to seconds since the Epoch.

在您的示例中,我们注意到时间在 3 月 27 日到 28 日之间变化了一个小时,这解释了除法余数。

为避免这种情况,您可以不使用 mktime,它需要本地时间的日期,而是使用 timegm,它计算自 UTC 时区日期纪元以来的秒数。

import calendar

today = calendar.timegm(date.today().timetuple())