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

創(chuàng)建任意時間的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)))
>><class 'datetime.datetime'>

時間加減運(yùn)算

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 轉(zhuǎn)換為 時間戳

print(datetime.now().timestamp())
>>1536212146.426456
print(type(datetime.now().timestamp()))
>><class 'float'>

fromtimestamp時間戳轉(zhuǎn)換為datetime

print(datetime.fromtimestamp(datetime.now().timestamp()))
>>2018-09-06 13:35:46.426456
print(type(datetime.fromtimestamp(datetime.now().timestamp())))
>><class 'datetime.datetime'>

strftime(datetime,fmt)datetime時間(不是時間元祖),轉(zhuǎn)換為fmt指定的字符串格式,
相當(dāng)于改變了類型,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")))
>><class 'str'>

strptime(str,fmt) 將字符串格式的時間按給定的fmt格式解析為datetime類型
相當(dāng)于改變了類型,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")))
>><class 'datetime.datetime'>

timetupledatetime類型轉(zhuǎn)換為時間元祖

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()))
>><class 'time.struct_time'>

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)

由上面的格式化可以總結(jié)為:

timestamp : datetime --> float(時間戳)
fromtimestamp : float(時間戳) --> datetime
strftime : datetime --> str
strptime : str --> datetime
timetuple : datetime --> time.struct_time

轉(zhuǎn)換時區(qū)

全世界共用一個時間戳,通過時區(qū)轉(zhuǎn)換轉(zhuǎn)換為各自地區(qū)的時間,因為各個時區(qū)的轉(zhuǎn)換方式不一樣,所以各個時區(qū)的時間不一致.但無論哪個時區(qū),轉(zhuǎn)換為時間戳之后一定是一致的
中國的時區(qū)是 utc +8:00
utcnow() 得到utc +0:00時間(utc時間) or 北京時間減8小時(注意這種方式有誤差而且沒有時區(qū)顯示)

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時區(qū)轉(zhuǎn)換函數(shù)

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

注意:北京時間轉(zhuǎn)東京時間并不是timedelta設(shè)置為hour=1,依然hour=9,由此可以看出時區(qū)轉(zhuǎn)換并非是單純的相加,而是直接替換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)  結(jié)果是一個timedelta  類型
3

datetime 模塊是支持處理閏年的,如果是閏年,datetime模塊會在2月的時候生成29天

格式化格式的含義

格式 含義
%a 本地(locale)簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化月份名稱
%B 本地完整月份名稱
%c 本地相應(yīng)的日期和時間表示
%d 一個月中的第幾天(01 - 31)
%H 一天中的第幾個小時(24小時制,00 - 23)
%I 第幾個小時(12小時制,01 - 12)
%j 一年中的第幾天(001 - 366)
%m 月份(01 - 12)
%M 分鐘數(shù)(00 - 59)
%p 本地am或者pm的相應(yīng)符
%S 秒(01 - 61)
%U 一年中的星期數(shù)。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數(shù)都放在第0周。
%w 一個星期中的第幾天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一為一個星期的開始。
%x 本地相應(yīng)日期
%X 本地相應(yīng)時間
%y 去掉世紀(jì)的年份(00 - 99)
%Y 完整的年份
%Z 時區(qū)的名字(如果不存在為空字符)
%% ‘%’字符

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容