第 19 章 日期和时间 日期和时间
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
"一!"钟楼上的钟敲响了、 六十分钟前 敲响了午夜十二点的钟声。
弗雷德里克-B-尼德姆,"时钟的轮回"
我一直在日历上,但从未准时过。
玛丽莲-梦露
程序员 在日期和时间上花费的精力令人吃惊。让我们来谈谈他们遇到的一些问题,然后探讨一些最佳实践和技巧,使情况不再那么混乱。
日期 日期的表示方法有很多种,实际上是太多种了。即使在使用罗马日历的英语中,您也会看到一个简单日期的多种变体:
-
1987 年 7 月 21 日
-
1987 年 7 月 21 日
-
21/7/1987
-
7/21/1987
在前面的例子中,我们很容易确定 7 代表月,21 代表月中的一天,因为月是不会到 21 的,但 1/6/2012 是指 1 月 6 日还是 6 月 1 日呢? 美国使用月/日/年,但欧洲则使用日/月/年。 加拿大在英语中通常使用月/日/年,但在法语中则使用日/月/年。 Sacré bleu!
在罗马历法中,不同语言对月份的命名也不尽相同,甚至年和月在其他文化中也有不同的定义。
时间也有自己的烦恼,尤其是时区和夏令时。 如果您看一下时区地图,时区是按照政治和历史的边界划分的,而不是按照经度每 15 度(360 度/24 度)划一条清晰的线。 各国开始和结束夏令时的日期也不一样,南半球国家的时钟提前,而北半球国家的时钟则后退,反之亦然。
Python 的标准库中有许多日期和时间模块,包括datetime timecalendar有一些重叠,有点混乱。
闰年
闰年 闰年是时间上的一个特殊皱褶。 您可能知道每四年是一个闰年(夏季奥运会和美国总统大选也是闰年)。 您还知道每 100 年不是闰年,但每 400 年是闰年吗? 这里有测试不同年份闰年的代码:
>>>importcalendar>>>calendar.isleap(1900)False>>>calendar.isleap(1996)True>>>calendar.isleap(1999)False>>>calendar.isleap(2000)True>>>calendar.isleap(2002)False>>>calendar.isleap(2004)True
供好奇者参考:
-
一年有 365.242196 天(地球绕太阳转一圈后,从它开始的地方到它的轴心大约转了四分之一圈)。
-
每四年增加一天,现在平均一年有 365.242196 - 0.25 = 364.992196 天。
-
每 100 年减去一天,现在平均一年有 364.992196 + 0.01 = 365.002196 天
-
每 400 年增加一天,现在平均一年有 365.002196 - 0.0025 = 364.999696 天
现在已经足够接近了!我们不讨论闰秒。
日期时间模块
标准的datetime 模块处理日期和时间(这并不奇怪)。它定义了四个主要对象类,每个类都有许多方法:
-
date表示年、月和日 -
time小时、分钟、秒和分数 -
datetime同时表示日期和时间 -
timedelta表示日期和/或时间间隔
您可以通过 指定年、月和日,创建一个date 对象。这些值可以作为属性使用:
>>>fromdatetimeimportdate>>>halloween
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access