Python日期时间与时间模块之间的差异


136

我试图弄清楚datetimetime模块之间的区别,以及每个模块的用途。

我知道datetime提供日期和时间。该time模块的用途是什么?

将理解示例,并且将特别关注与时区有关的差异。

Answers:


101

time模块主要用于处理unix时间戳;表示为一个浮点数,以距unix纪元的秒数​​为单位。该datetime模块可以支持许多相同的操作,但是提供了更多的面向对象的类型集,并且对时区的支持有限。


22
此外,time和之间有什么区别datetime.time
SparkAndShine 2015年

细化属性(如实时/单调)将非常好。像POSIX标准您有:CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_THREAD,等等...在POSIX时钟看:stackoverflow.com/questions/3523442/...
Vajk Hermecz

11

坚决time防止DST歧义。

专门使用系统time模块而不是datetime模块,以防止夏令时(DST)引起歧义

转换为任何时间格式(包括本地时间)都非常容易:

import time
t = time.time()

time.strftime('%Y-%m-%d %H:%M %Z', time.localtime(t))
'2019-05-27 12:03 CEST'

time.strftime('%Y-%m-%d %H:%M %Z', time.gmtime(t))
'2019-05-27 10:03 GMT'

time.time()是一个浮点数,表示自系统纪元以来的时间(以秒为单位)。time.time()非常适合明确的时间戳记。

如果系统另外运行了网络时间协议(NTP)守护程序,那么最终将获得相当可靠的时基。

这是该模块的文档time


在您的示例中,您使用time.localtime(),当然可以放入DST。当然,如果我们要成为纯粹主义者,我们不应该使用它time.gmtime()吗?:)
Seamus '18年

@Seamus只需简单地测试中的两个命令,就会ipython显示出time.gmtime()一个元组,而time.time()给出UNIX纪元时间为自1970年1月1日世界标准时间00:00:00以来经过的秒的十进制值。该函数time.localtime(t)将纪元时间转换为本地时间时间元组。因此,您的问题的答案是“否”。
Serge Stroobandt

有没有一种方法可以将天数添加到时间对象?使用datetime有timedelta(days = 6)方法。
Nehemias Herrera

@NehemiasHerrera t = time.time()是一个浮点数,表示自系统纪元以来的时间(以秒为单位)。因此,每天只需增加或减去86400秒即可;t += 86400
Serge Stroobandt,

5

当您只需要特定记录的时间时,可以使用时间模块-假设您每天有一个单独的表/文件用于交易,那么您只需要时间。但是,时间数据类型通常用于存储2个时间点之间的时间

这也可以使用datetime完成,但是如果我们只处理特定日期的时间,则可以使用time模块。

日期时间用于存储特定数据和记录时间。就像在出租公司里一样。截止日期将是datetime数据类型。


3

如果您对时区感兴趣,则应考虑使用pytz。


8
听起来他对时间和日期时间模块以及它们之间的时区差异最感兴趣。出于所有应有的尊重,与此相关的另一种依赖几乎是无关紧要的。
sbartell

3
时区和日期时间模块中对时区的支持确实非常差……如果他真的对以有用的方式处理时区感兴趣,那么他真的应该了解pytz。您引入依赖关系来解决当前依赖关系无法帮助您解决问题的问题...
donkopotamus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.