time 模块用于取得 Unix 纪元时间戳,并加以处理。但是,如果以更方便的格
式显示日期,或对日期进行算术运算(例如,搞清楚 205 天前是什么日期,或 123
天后是什么日期),就应该使用 datetime 模块。
datetime 模块有自己的datetime 数据类型。datetime 值表示一个特定的时刻。在交互式环境中输入以下代码:
>>> import datetime
➊ >>> datetime.datetime.now()
➋ datetime.datetime(2015, 2, 27, 11, 10, 49, 55, 53)
➌ >>> dt = datetime.datetime(2015, 10, 21, 16, 29, 0)
➍ >>> dt.year, dt.month, dt.day
(2015, 10, 21)
➎ >>> dt.hour, dt.minute, dt.second
(16, 29, 0)
调用 datetime.datetime.now()➊返回一个 datetime
对象➋,表示当前的日期和时间,根据你的计算机的时钟。这个对象包含当前时刻的年、月、日、时、分、秒和微秒。也可以利用
datetime.datetime()函数➌,向它传入代表年、月、日、时、分、秒的整数,得到特定时刻的 datetime 对象。这些整数将保存在 datetime 对象的
year、 month、day➍、hour、minute 和 second➎属性中。
Unix 纪元时间戳可以通过 datetime.datetime.fromtimestamp(),转换为 datetime对象。datetime
对象的日期和时间将根据本地时区转换。在交互式环境中输入以下代码:
>>> datetime.datetime.fromtimestamp(1000000)
datetime.datetime(1970, 1, 12, 5, 46, 40)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2015, 2, 27, 11, 13, 0, 604980)
调用 datetime.datetime.fromtimestamp()并传入 1000000,返回一个 datetime 对象,表示 Unix 纪元后 1000000 秒的时刻。传入
time.time(),即当前时刻的 Unix 纪元时间戳,则返回当前时刻的 datetime 对象。因此,表达式 datetime.datetime.now()和
datetime.datetime.fromtimestamp(time.time())做的事情相同,它们都返回当前时刻的 datetime 对象。
注意 这些例子是在一台设置了太平洋标准时间的计算机上输入的。如果你在另一个时区,结果会有所不同。
datetime 对象可以用比较操作符进行比较,弄清楚谁在前面。后面的 datetime 对象是“更大”的值。在交互式环境中输入以下代码:
➊ >>> halloween2015 = datetime.datetime(2015, 10, 31, 0, 0, 0)
➋ >>> newyears2016 = datetime.datetime(2016, 1, 1, 0, 0, 0)
>>> oct31_2015 = datetime.datetime(2015, 10, 31, 0, 0, 0)
➌ >>> halloween2015 == oct31_2015
True
➍ >>> halloween2015 > newyears2016
False
➎ >>> newyears2016 > halloween2015
True
>>> newyears2016 != oct31_2015
True
为 2015 年 10 月 31 日的第一个时刻(午夜)创建一个 datetime 对象,将它保存在 halloween2015 中➊。为 2016 年 1 月 1
日的第一个时刻创建一个 datetime 对象,将它保存在 newyears2016 中➋。然后,为 2015 年 10 月 31 日的午夜创建另一个对象,将它保存在
oct31_2015 中。比较halloween2015 和oct31_2015,它们是相等的➌。比较newyears2016
和halloween2015,newyears2016 大于(晚于)halloween2015 ➍➎。