python中的datetime模块
参考自python3.6官方文档,无脑翻译,仅供参考。
datetime对象
datetime对象是一个包含了date对象和time对象所有信息的独立对象。和date对象一样,datetime假定当前格林尼治时间想两侧延伸,也像time对象一样,datetime对象假定一天有3600 * 24秒。
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
year,month,day为必须参数。
tzinfo可以为None,也可以是tzinfo子类的实例。
其余为整数。
各项取值范围,如图:
image.png
如果任意一个参数在给定的取值范围之外,会引发ValueError异常。
备注:fold参数为python 3.6新添加的参数。至于fold参数啥意思,干啥的,我也不知道,因为文档里没写。
类方法(classmethod)
datetime.today()
返回不包含时区信息的当前时间。这等价于datetime.fromtimestamp(time.time())
from datetime import datetime
import time
# datetime.today()
dt1 = datetime.today()
print(dt1, type(dt1))
dt2 = datetime.fromtimestamp(time.time())
print(dt2, type(dt2))
image.png
datetime.now(tz=None)
返回当前当地日期和时间,如果可选参数tz为None或者没被指定,就和today()函数效果一样。
但是,应该尽可能的提供更多信息,反正比time.time()获得的时间戳更好。(例如,这可能在不同平台提供C语言的gettimeofday()方法)。
如果tz不为None,那它一定是tzinfo子类的实例,并且当前日期和时间会被转换为tz的时区。
备注:tzinfo是一个抽象类,无法被直接实例化,你要想用的话必须新建一个类,并继承自tzinfo。
在说一句,tzinfo位于datetime.tzinfo。
dt3 = datetime.now()
print(dt3, type(dt3))
image.png
datetime.utcnow()
返回没有时区的当前UTC日期和时间。和now()一样,但是作为一个理想时间(naive datetime)对象返回当前UTC日期和时间。
意识到当前UTC时间能被datetime.now(timezone.utc)遵守。
dt5 = datetime.now(timezone.utc)
print(dt5, type(dt5))
image.png
datetime.fromtimestamp(timestamp, tz=None)
根据POSIX时间戳返回当地日期和时间,例如通过time.time()返回时间戳(也叫Unix时间戳)。
如果可选参数tz是None或者没有指定,时间戳被转换为操作系统的本地日期和时间,并返回的是理想时间的datetime。
如果tz不为None,那么它必须是tzinfo的子类的实例,并且时间戳被转换为tz的时区。
在这种情况下,结果等同于tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))。
fromtimestamp()可能会已发OverflowError异常,如果timestamp超过了当前操作系统的C语言的localtime()函数 或 gmtime()函数所支持的值,则会引发OSError异常。
timestamp = time.time()
datetime_from_timestamp = datetime.fromtimestamp(timestamp)
print(datetime_from_timestamp, type(datetime_from_timestamp))
image.png
datetime.utcfromtimestamp(timestamp)
根据POSIX时间戳返回没有时区信息的UTC datetime。有可能会引发OverflowError,当timestamp超过了当前操作系统的C函数gmtime()所支持的值时。
C函数gmtime()失败时,则会引发OSError异常。
dt5 = datetime.utcfromtimestamp(timestamp)
print(dt5, type(dt5))
image.png
datetime.strptime(date_string, format)
根据date_string返回一个datetime对象,转换时依据format。这等同于datetime(*(time.strptime(date_string, format)[0:6]))
不写了,回家。