日期时间模块 datetime
datetime 模块提供了可以通过多种方式操作日期和时间的类。在支持日期时间数学运算的同时,实现更有效地解析属性、格式化输出和数据操作。常用的子类有 datetime 类和 timedelta 类。class datetime.datetime
日期和时间的结合。属性:year, month, day, hour, minute, second, microsecondclass datetime.timedelta
表示两个 date 对象或 time 对象,或者两个 datetime 对象之间的时间间隔,精确到微秒
1. datetime 子类
datetime 对象是一个包含了来自 date 对象和 time 对象所有信息的单一对象。1.1 类方法
now():返回当前的本地 datetime
utcnow():返回当前 UTC 日期时间
fromtimestamp(timestamp, tz=None):将时间戳转为 datetime 类型的时间。tz为时区参数
fromisoformat(date_string):将日期字符串转为 datetime 类型的时间
strptime(date_string, format):将时间字符串按照 format 格式解析生成 datetime 类型的时间
1.2 实例方法
date():返回具有同样 year, month 和 day 值的 date 对象
time():返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象
timetuple():返回一个 time.struct_time
toordinal():返回日期的预期格列高利历序号
timestamp():返回时间戳
weekday():返回一个整数代表星期几,星期一为 0,星期天为 6
isoweekday():返回一个整数代表星期几,星期一为 1,星期天为 7
ctime():返回一个代表日期和时间的字符串
strftime(format):返回一个由显式格式字符串所指明的代表日期和时间的字符串
1.3 使用样例
>>> from datetime import datetime
>>> datetime.strptime('20191010', '%Y%m%d') # 将时间字符串转成datetime类型
datetime.datetime(2019, 10, 10, 0, 0)
>>> datetime.now() # 当前时间
datetime.datetime(2019, 11, 1, 15, 42, 20, 119275)
>>> dt = datetime(2019,1,1,0,0,0) # 实例化datetime对象
>>> dt
datetime.datetime(2019, 1, 1, 0, 0)
>>> dt.date()
datetime.date(2019, 1, 1)
>>> dt.time()
datetime.time(0, 0)
>>> dt.replace(2010) # 修改时间
datetime.datetime(2010, 1, 1, 0, 0)
>>> dt.timetuple() # 返回time.struct_time类
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)
>>> dt.timestamp() # 时间戳
1546272000.0
>>> dt.weekday() # 返回一个整数代表星期几,星期一为 0,星期天为 6
1
>>> dt.strftime('%Y-%m-%d %X') # 返回日期时间字符串
'2019-01-01 00:00:00'
>>>
2. timedelta类
timedelta 类用来描述一段时间,你可以把它理解成两个日期或时间点之间的时间间隔。timedelta 对象之间,以及 timedelta 对象和 datetime 对象之间,可以做加减运算。2.1 参数
要想创建一个 datetime.timedelta 类,你需要将指定的时间段传递给类的构造函数。可选参数包含:weeks:周数
days:天数(默认)
hours:小时数
minutes:分钟数
seconds:秒数
microseconds:微妙数
2.2 使用样例
>>> from datetime import datetime, timedelta
>>> timedelta(days=3) # 3天的时间段
datetime.timedelta(days=3)
>>> timedelta(days=3, hours=2.5) # 3天加上2.5小时的时间段
datetime.timedelta(days=3, seconds=9000)
>>> now = datetime.now() # 当前时间
>>> now
datetime.datetime(2019, 11, 9, 15, 24, 13, 679425)
>>> delta = timedelta(days=3, hours=2, minutes=15) # 3天加上2小时15分钟的时间段
>>> now - delta # 3天又2小时15分钟之前的日期时间
datetime.datetime(2019, 11, 6, 13, 9, 13, 679425)
2.3 应用讲解
2.3.1 今年五一节零时之前1376天零7小时是几月几号几时?
>>> from datetime import datetime, timedelta
>>> dt = datetime(2019,5,1,0,0,0)
>>> delta = timedelta(days=1376, hours=7)
>>> dt - delta
datetime.datetime(2015, 7, 24, 17, 0) # 答案是2015年7月24日17时
2.3.2 当前时刻距离新年有多少秒钟?
>>> from datetime import datetime, timedelta
>>> now = datetime.now() # 当前时刻
>>> new_year = datetime(now.year+1, 1, 1, 0, 0, 0) # 下一个元旦的零时
>>> delta = new_year - now # 计算时间间隔
>>> delta.total_seconds() # 获取时间间隔的总秒数
4523121.717534