>2018print("%02d"%(datetime.now().month))>>09print("%02d"%(datetime.now().day))>>06print("%02d"%(。python之datetime模块。" />

python之datetime模块

获取年月日时分秒示例

from datetime import datetimeprint(datetime.now()) >>2018-09-06 11:32:42.870157 print("%4d"%(datetime.now().year)) >>2018 print("%02d"%(datetime.now().month)) >>09 print("%02d"%(datetime.now().day)) >>06 print("%02d"%(datetime.now().hour)) >>11 print("%02d"%(datetime.now().minute)) >>32 print("%02d"%(datetime.now().second)) >>42

创建任意时间的datetime
语法: datetime(year,month,day,hour,minute,second,microsecond,tzinfo,*args)print(datetime(2018,9,6)) >>2018-09-06 00:00:00 print(type(datetime(2018,9,6))) >>

时间加减运算
from datetime import datetime, timedelta a = datetime(2012,9,23) print(a+timedelta(days=10)) >> 2012-10-03 00:00:00b = datetime(2012,12,21) d = b -a print(d.days) >> 89 now = datetime.today() print(now) >> 2012-12-21 14:54:43.094063 print(now +timedelta(minutes = 10)) >> 2012-12-21 15:04:43.094063

格式化 (文章最下面有格式化字符的含义) timestampdatetime 转换为 时间戳
print(datetime.now().timestamp()) >>1536212146.426456 print(type(datetime.now().timestamp())) >>

fromtimestamp时间戳转换为datetime
print(datetime.fromtimestamp(datetime.now().timestamp())) >>2018-09-06 13:35:46.426456 print(type(datetime.fromtimestamp(datetime.now().timestamp()))) >>

strftime(datetime,fmt)datetime时间(不是时间元祖),转换为fmt指定的字符串格式,
相当于改变了类型,datetime --> str
print(datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S")) >>2018-09-06 13:22:15 print(type(datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S"))) >>

strptime(str,fmt) 将字符串格式的时间按给定的fmt格式解析为datetime类型
相当于改变了类型,str --> datetime
print(datetime.strptime("2015-10-10 10:10:10","%Y-%m-%d %H:%M:%S")) >>2015-10-10 10:10:10 print(type(datetime.strptime("2015-10-10 10:10:10","%Y-%m-%d %H:%M:%S"))) >>

timetupledatetime类型转换为时间元祖
print(datetime.now().timetuple()) >>time.struct_time(tm_year=2018, tm_mon=9, tm_mday=6, tm_hour=13, tm_min=23, tm_sec=47, tm_wday=3, tm_yday=249, tm_isdst=-1) print(type(datetime.now().timetuple())) >>

datetime --> str --> datetime --> time.struct_time 示例:
print(datetime.strptime(datetime.strftime(datetime.now(),"%Y-%m-%d %H:%M:%S"),"%Y-%m-%d %H:%M:%S").timetuple()) >>time.struct_time(tm_year=2018, tm_mon=9, tm_mday=6, tm_hour=13, tm_min=23, tm_sec=47, tm_wday=3, tm_yday=249, tm_isdst=-1)

由上面的格式化可以总结为: timestamp : datetime --> float(时间戳)
fromtimestamp : float(时间戳) --> datetime
strftime : datetime --> str
strptime : str --> datetime
timetuple : datetime --> time.struct_time
转换时区 全世界共用一个时间戳,通过时区转换转换为各自地区的时间,因为各个时区的转换方式不一样,所以各个时区的时间不一致.但无论哪个时区,转换为时间戳之后一定是一致的
中国的时区是 utc +8:00
utcnow() 得到utc +0:00时间(utc时间) or 北京时间减8小时(注意这种方式有误差而且没有时区显示)
from datetime import datetime,timedelta,timezoneprint(datetime.utcnow().replace(tzinfo=timezone.utc)) >>2018-09-06 06:03:03.502072+00:00 print(datetime.now() - timedelta(hours=8)) >>2018-09-06 06:03:03.503340

astimezone时区转换函数
from datetime import datetime,timedelta,timezoneprint(datetime.utcnow().replace(tzinfo=timezone.utc)) >>2018-09-06 06:11:16.572659+00:00# UTC时间 print(datetime.utcnow().replace(tzinfo=timezone.utc).astimezone(timezone(timedelta(hours=8)))) >>2018-09-06 14:11:16.572659+08:00# 北京时间 print(datetime.utcnow().replace(tzinfo=timezone.utc).astimezone(timezone(timedelta(hours=9)))) >>2018-09-06 15:11:16.572659+09:00# 东京时间 print(datetime.utcnow().replace(tzinfo=timezone.utc).astimezone(timezone(timedelta(hours=8))).astimezone(timezone(timedelta(hours=9)))) >>2018-09-06 15:11:16.572659+09:00

【python之datetime模块】注意:北京时间转东京时间并不是timedelta设置为hour=1,依然hour=9,由此可以看出时区转换并非是单纯的相加,而是直接替换timezone
日期大小比较
__eq__() 等于 __gt__() 大于 __ge__() 大于等于 __lt__() 小于 __le__()小于等于 __ne__() 不等于

代码示例
a = datetime.date(2018,7,22) b = datetime.date(2018,7,23) >>a.__eq__(b) False >>a.__gt__(b) False >>a.__lt__(b) True >>a.__ne__(b) True

比较两个日期差多少天
x.__sub__(y)x-y x.__rsub__(y)y-x

代码
a = datetime.date(2018,7,23) b = datetime.date(2018,7,20) >>a.__sub__(b).days# a.__sub__(b)结果是一个timedelta类型 3

datetime 模块是支持处理闰年的,如果是闰年,datetime模块会在2月的时候生成29天
格式化格式的含义 格式 含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符

    推荐阅读