python之datetime模块

获取年月日时分秒示例

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

格式化 (文章最下面有格式化字符的含义)

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,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 时区的名字(如果不存在为空字符)
%% ‘%’字符

你可能感兴趣的:(python之datetime模块)