获取年月日时分秒示例
from datetime import datetime
print(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:00
b = 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
格式化 (文章最下面有格式化字符的含义)
timestamp
将datetime
转换为 时间戳
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")))
>>
timetuple
将datetime
类型转换为时间元祖
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,timezone
print(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,timezone
print(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
注意:北京时间转东京时间并不是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 时区的名字(如果不存在为空字符)
%% ‘%’字符