python模塊分析之time和datetime模塊

前言

咱們使用time和datetime模塊的主要目的是對時間戳、時間字符串、時間元組等時間的表述對象進行相互的轉化。而咱們平時編碼涉及兩個時間:一個是上海時間,也能夠說是北京時間,一個是UTC時間,即世界協調時間;北京時間比UTC時間多了八個小時。python

時間戳、時間字符串、時間元組

  • 時間戳:通常是float的形式;函數

  • 時間字符串:指的是必定格式描述時間的字符串。編碼

%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  時區的名字(若是不存在爲空字符)    
%%  ‘%’字符

%Y-%m-%d %H:%M:%S   # 年月日時分秒
  • 時間元組:共有九個元素,能夠方便數學計算
0    tm_year(年)  好比2011 
1    tm_mon(月)   1 - 12
2    tm_mday(日)  1 - 31
3    tm_hour(時)  0 - 23
4    tm_min(分)   0 - 59
5    tm_sec(秒)   0 - 61
6    tm_wday(weekday)    0 - 6(0表示週日)
7    tm_yday(一年中的第幾天)    1 - 366
8    tm_isdst(是不是夏令時)    默認爲-1

time模塊

time模塊主要有如下的函數:.net

time():以秒爲單位以float形式返回自從1970年1月1日開始計算的當前時間
clock():返回進程做爲浮點數開始時的CPU時間
sleep():以浮點數形式延遲數秒,同步阻塞;
gmtime():將從Epoch開始的秒轉換爲UTC時間元組
localtime():將從Epoch開始的秒轉換爲本地時間元組
asctime():將時間元組轉換爲字符串
ctime():將時間轉換爲秒字符串
mktime():將本地時間元組轉換爲從Epoch開始的秒
strftime():根據格式規範將時間元組轉換爲字符串
strptime():根據格式規範將字符串解析爲時間元組
  • 實例
import time

# 時間戳,秒爲單位,float
print(time.time())  # 1547106159.3509371

# 在不一樣的系統上含義不一樣。
# 在UNIX系統上,它返回的是「進程時間」,它是用秒錶示的浮點數(時間戳)。
# 在WINDOWS中,第一次調用,返回的是進程運行的實際時間。
# 而第二次以後的調用是自第一次調用之後到如今的運行時間。
print(time.clock())

# 進程休眠時間
print(time.sleep(1))

# 將一個時間戳轉換爲UTC時區的元組時間。secs參數未提供,則以當前時間爲準。
print(time.gmtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=7, tm_min=50, tm_sec=27, tm_wday=3, tm_yday=10, tm_isdst=0)
print(time.gmtime(1234)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=20, tm_sec=34, tm_wday=3, tm_yday=1, tm_isdst=0)
#注意tm_wday指的是周幾,這裏是從0開始的,0表明週一

# 將一個時間戳轉換爲本地時區的元組時間。secs參數未提供,則以當前時間爲準。
print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=15, tm_min=55, tm_sec=17, tm_wday=3, tm_yday=10, tm_isdst=0)
print(time.localtime(1234)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=20, tm_sec=34, tm_wday=3, tm_yday=1, tm_isdst=0)

# 將一個時間元組轉換成時間戳
print(time.mktime(time.localtime())) # 547107729.0
print(time.mktime((2019, 1,10,15,55,17,3,20,0))) # 1547106917.0

# 將一個時間戳轉換成時間字符串
print(time.ctime()) # Thu Jan 10 16:15:44 2019
print(time.ctime(time.time())) # Thu Jan 10 16:15:44 2019
print(time.ctime(1234)) # Thu Jan  1 08:20:34 1970

# 將時間元組轉換成時間字符串,沒有參數就會默認time.localtime()
print(time.asctime(time.localtime())) # Thu Jan 10 16:13:13 2019
print(time.asctime((2019, 1,10,15,55,17,3,20,0))) # Thu Jan 10 15:55:17 2019

# 將時間元組轉化成某種格式的時間字符串
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2019-01-10 16:20:06
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 2019-01-10 16:20:06

# 將某種格式的時間字符串轉化成時間元組
print(time.strptime("2019-01-10 16:20:06", "%Y-%m-%d %H:%M:%S")) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=16, tm_min=20, tm_sec=6, tm_wday=3, tm_yday=10, tm_isdst=-1)

# 將一個時間字符串轉換成時間戳
print(time.mktime(time.strptime("2019-01-10 16:20:06", "%Y-%m-%d %H:%M:%S")))

datatime模塊

datatime模塊顧名思義針對的是日期,主要有5個類:code

  • datetime.date:日期對象orm

  • datetime.datetime:日期時間對象對象

  • datetime.time:時間對象blog

  • datetime.timedelta:時間間隔對象繼承

  • datetime.tzinfo:時區信息對象,這個對象不多使用進程

date對象

date對象主要有year,month,day三個屬性,其支持加減,各類比較運算符。

import datetime

date = datetime.date(2019,1,3)
print(date.year)
print(date.month)
print(date.day)

# 將時間戳轉化成日期對象
d = datetime.date.fromtimestamp(123456)
# 輸出今日的日期對象
d = datetime.date.today()
# 將日期對象轉換爲時間元組
print(d.timetuple()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=11, tm_isdst=-1)
# 將一個日期對象替換,返回新的日期對象
print(d.replace(2019,5,2))  # 2019-05-02

# 日期轉時間字符串
print(d.ctime()) # Fri Jan 11 00:00:00 2019
# 日期轉指定格式日期字符串
print(d.strftime("%Y %m %d"))  # 2019 01 11

# 將日期標準化
dx = datetime.date(2019,5,2)
print(dx.isoformat()) # 標準化日期格式 2019-05-02
print(dx.isocalendar()) # 返回年數、週數、星期幾 (2019, 18, 4)
print(dx.isoweekday()) # 返回星期幾,週一爲1,   4
print(dx.weekday()) # 返回星期幾,週一爲0       3

# 支持加減和比較運算符
d1 = datetime.date(2019,1,3)
d2 = datetime.date(2018,10,21)
print(d1-d2) # 相差的天數
print(d1 + datetime.timedelta(days=3)) # 相加的另外一個必須是時間間隔對象
print(d1 > d2) # True

# 返回公曆開始到如今的天數
x = datetime.date.today().toordinal()
print(x) # 737070
# 將公曆開始到如今的天數轉爲日期對象
d = datetime.date.fromordinal(x)
print(d) # 2019-01-11

time時間對象

時間對象主要有小時、分鐘、秒、微秒和tzinfo信息等屬性。

import datetime
t = datetime.time(3,40,30,30)
print(t.hour) # 小時
print(t.minute) # 分鐘
print(t.second) # 秒
print(t.microsecond) # 微秒
print(t.tzinfo)
# 表示的最大數值
print(t.max) # 23:59:59.999999
# 表示的最小數值
print(t.min) # 00:00:00

# 支持比較運算符
t1 = datetime.time(2,30,30,40)
t2 = datetime.time(2,40,35,40)
print(t1 < t2) # True
print(t1 != t2) # True

# 將時間對象轉化iso格式
print(t1.isoformat()) # 02:30:30.000040
# 指定時間字符串格式
print(t1.strftime('%H:%M:%S')) # 02:30:30

# 替換返回一個新的時間對象
print(t1.replace(12,42,30,1000))

datetime日期時間對象

datetime對象是date和time對象的合體,方法大多繼承自date,主要屬性有year, month, day, hour,minute, second, microsecond(微秒)。

import datetime
dt = datetime.datetime(2019,2,3,10,30,25,200)
print(dt) # 2019-02-03 10:30:25.000200

# 屬性
print(dt.year) # 2019
print(dt.month) # 2
print(dt.day) # 3
print(dt.hour) # 10
print(dt.minute) # 30
print(dt.second) # 25
print(dt.microsecond) # 200

print(dt.time())
print(dt.date())
print(dt.timetuple()) # time.struct_time(tm_year=2019, tm_mon=2, tm_mday=3, tm_hour=10, tm_min=30, tm_sec=25, tm_wday=6, tm_yday=34, tm_isdst=-1)

# 類方法
# 將時間戳轉化成本地日期時間對象
print(datetime.datetime.fromtimestamp(123456))
# 將公曆日期轉換成日期時間對象
print(datetime.datetime.fromordinal(7777))
# 將時間戳轉化成UTC日期時間對象
print(datetime.datetime.utcfromtimestamp(123456))
# 獲取當前本地的時間
print(datetime.datetime.now())
# 獲取當前utc時間
print(datetime.datetime.utcnow())
# 獲取當前本地的時間
print(datetime.datetime.today())
# 將date對象和time對象聯合成datetime對象
print(datetime.datetime.combine(datetime.date(2019,1,11), datetime.time(2))) # 2019-01-11 02:00:00

timedelta時間間隔對象

timedelta對象主要有day,hour,seconds, microseconds,milliseconds, minutes, weeks等7個屬性。

import datetime
t = datetime.timedelta(days=1,seconds=30,microseconds=800,milliseconds=200,minutes=30,hours=21,weeks=2)
print(t) # 15 days, 21:30:30.200800

print(t.min) # -999999999 days, 0:00:00
print(t.max) # 999999999 days, 23:59:59.999999
# weeks+days表明的總天數
print(t.days) # 15
# hours+minutes+seconds表明的總秒數
print(t.seconds)
# milliseconds+microseconds表明的總微秒數
print(t.microseconds)
# 總時間轉換成秒數
print(t.total_seconds())

# 支持加減乘除和比較運算符
t1 = datetime.timedelta(days=3)
t2 = datetime.timedelta(days=5)
print(t1+t2) # 8 days, 0:00:00
print(t1-t2) # -2 days, 0:00:00
print(t1/t2) # 1.6666666666666667
print(t1*3) # 9 days, 0:00:00
print(t1//t2) # 0

總結

  • time模塊主要使用在時間戳、時間元組和時間字符串之間進行轉換;

  • 時間元組struct_time是鏈接time模塊和datatime模塊的橋樑;

參考

相關文章
相關標籤/搜索