Python語法速查: 16. 時間日期處理

返回目錄html

 

 (1)datetime模塊

datetime模塊能夠處理時間和日期,其中包含如下類:date類、time對象、datetime對象、timedelt對象、tzinfo對象。python

 

● date類cors

date類用於處理日期。函數

操做 說明
建立date對象
date(year, month, day) 建立一個新的日期對象,返回的date對象是不可變的。入參year, month, day分別整數形式的年、月、日。
類屬性
date.min 可以表示的最小日期:datetime.date(1,1,1)。
date.max 可以表示的最大日期:datetime.date(9999,12,31)。
date.resolutiom 不相等的日期之間最小可解析的差值:datetime.timedelta(1)
類方法
date.today() 返回當前日期的date對象。
date.fromtimestamp(timestamp) 返回對應時間戳timestamp的date對象,timestamp是time.time()函數的返回值。
date.fromordinal(ordinal) 返回從最小日期(公元1年1月1日)開始算起的ordinal天的date對象。
實例屬性
d.year 實例日期對應的年。
d.month 實例日期對應的月。
d.day 實例日期對應的日。
實例方法
d.weekday() 返回實例日期對應的周幾,範圍:0~6(0表示週一)
d.isoweekday() 返回實例日期對應的周幾,範圍:1~7(1表示週一)
d.ctime() 返回一個字符串,格式與「time模塊」中的time.ctime()的格式相同。
d.isoformat() 返回一個字符串(ISO 8601格式),形式爲:'YYYY-MM-DD'
d.isocalendar() 返回一個元組:(iso_year, iso_week, iso_weekday),iso_weekday範圍爲:1~7,iso_week範圍爲:1~53(當年第一個星期四的周爲第1周)。
d.strftime(format) 返回一個字符串,表示日期的格式與「time模塊」中的time.strftime()相同,只能用於1900年之後的日期。 format格式說明
d.timetuple() 返回適合函數在time模塊中使用的time_struct對象,其中小時、分、秒設爲0。
d.toordinal() 將實例日期轉換爲一個從公元1年1月日起的天數值。
d.replace([year [,month [,day]]]) 返回一個新的date對象,並使用入參值代替原有值。

 

● time類ui

time類用於處理時間。es5

操做 說明
建立time對象
time(hour [,minute [,second [,microsecond [,tzinfo]]]]) 建立一個新的時間對象,返回的time對象是不可變的。入參micorsecond是微秒,入參tzinfo是一個時區tzinfo類的實例,詳見後述。
類屬性
t.min 可以表示的最小時間:datetime.time(0,0)
t.max 可以表示的最大時間:datetime.time(23,59,59,999999)
t.resolution 不等的time對象之間的最小可解析的差值:datetime.time(0,0,1)
實例屬性
d.hour 實例日期對應的小時。
d.minute 實例日期對應的分。
d.second 實例日期對應的秒。
d.microsecond 實例日期對應的微秒。
d.tzinfo 實例日期對應的tzinfo時區。
實例方法
t.isoformat() 返回一個字符串,形式爲:"HH:MM:SS.mmmmmm",若是微秒爲0,則省略微秒部分。若是提供了時區信息,會再加上一個偏移量。
t.strftime(format) 返回一個字符串,格式與「time模塊」中的time.strftime()相同。 format格式說明
t.replace(hour [,minute [,second [,microsecond [,tzinfo]]]]) 返回一個新的time對象,並使用入參提供的值替代原實例中的值。
t.dst() 返回t.tzinfo.dst(None)的值(夏令時),是一個timedelta對象。若是未設置時區,則返回None。
t.tzname() 返回t.tzinfo.tzname()的值,若是未設置時區,則返回None。
t.utcoffset() 返回t.tzinfo.utcoffset(None)的值,是一個timedelta對象。若是未設置時區,則返回None。

 

● datetime類spa

datetime類用於處理時間和日期。code

操做 說明
建立datetime對象
datetime(year, month, day [hour [,minute [,second [,microsecond [,tzinfo]]]]]) 建立一個新的datetime對象,入參含義同date對象和time對象。返回的datetime對象是不可變的
類屬性
datetime.min 可以表示的最小時間:datetime.datetime(1,1,1,0,0)
datetime.max 可以表示的最大時間:datetime.datetime(9999,12,31,23,59,59,999999)
datetime.resolution 不等的datetime對象之間的最小可解析的差值:datetime.timedelta(0,0,1)
類方法
datetime.now([tz]) 基於當前本地日期時間建立一個datetime對象,tz是可選時區信息。
datetime.utcnow() 基於當前的UTC日期時間建立一個datetime對象。
datetime.combine(date, time) 經過組合date對象和time對象,建立出一個datetime對象。
datetime.fromordinal() 經過指定序數天數,建立一個datetime對象,時間數值均爲0。
datetime.fromtimestamp(timestamp [,tz]) 基於「time模塊」中的time.time()函數返回的時間戳,建立一個datetime對象,tz是可選時區信息。
datetime.utcfromtimestamp(timestamp) 基於「time模塊」中的time.gmtime()函數返回的時間戳,建立一個datetime對象。
datetime.strptime(datestring, format) 根據format中的日期格式,解析datestring中的日期字符串,從而建立一個datetime對象。解析使用「time模塊」中的strptime()函數。 format格式說明
實例屬性
d.year 實例對應的年。
d.month 實例對應的月。
d.day 實例對應的日。
d.hour 實例對應的小時。
d.minute 實例對應的分。
d.second 實例對應的秒。
d.microsecond 實例對應的微秒。
d.tzinfo 實例對應的tzinfo時區。
實例方法
d.date() 返回一個具備相同日期的date對象。
d.time() 返回一個具備相同時間的time對象,沒有時區信息。
d.utctimetuple() 返回time.struct_time對象。
d.timetz() 使用相同的時間和時區信息返回time對象。
t.strftime(format) 返回一個字符串,格式與「time模塊」中的time.strftime()相同。 format格式說明
d.astimezone(tz) 返回一個位於不一樣時區tz中的新datetime對象,新對象的UTC標準時間同本實例的UTC標準時間。
d.replace(year, month, day [hour [,minute [,second [,microsecond [,tzinfo]]]]]) 返回一個新的datetime對象,並使用入參值代替原有值。

 

● timedelta類與日期運算orm

timedelta對象表示兩個日期或時間之間的差值(時間跨度)。htm

操做 說明
建立timedelta
timedelta([days [,seconds [,microsecond [,miliseconds [,minutes [,hours [,weeks]]]]]]]) 建立表示兩個日期時間之差的timedelta對象,只有days, seconds, microsecond有意義,它們用於在內部表示差值。若是提供其餘參數,它們將被轉換爲以上三值。返回的time對象是不可變的
類屬性
timedelta.min 可以表示的最大跨度的負timedelta值:datetime.timedelta(-999999999)
timedelta.max 可以表示的最大跨度的正timedelta值:datetime.timedelta(days=999999999,hours=23,minutes59,seconds=59,microseconds=999999)
timedelta.resolution 不等的timedelta對象之間的最小可解析的差值:datetime.timedelta(microseconds=1)
實例屬性
td.days 實例對應的天數差。
td.seconds 實例對應的秒數差(一天以內)。
td.microseconds 實例對應的微秒差(一天以內)。

 

timedelta自己可進行的數學運算:

操做 描述 示例
+ 兩個時間跨度相加 td3 = td1 + td2
- 兩個時間跨度相減 td3 = td1 - td2
* 時間跨度乘以整數 td2 = td1 * i; td2 = i * td1
// 時間跨度地板除以整數 td2 = td1 // i
+= 一元加法 td2 += td1
-= 一元減法 td2 -= td1
- 取負 td2 = -td1
abs() 取絕對值 td2 = abs(td1)
< 小於 td1 < td2
<= 小於等於 td1 <= td2
== 相等 td1 == td2
!= 不等 td1 != td2
> 大於 td1 > td2
>= 大於等於 td1 >= td2

 

date對象、datetime對象、時間跨度timedelta對象之間能夠互相運算:

操做 描述 示例
跨度 = 日期 - 日期 返回timedelta對象 td = date1 - date2
日期 = 日期 - 跨度 返回datetime對象 date2 = date1 - td
日期 = 日期 + 跨度 返回datetime對象 date2 = date1 + td
< 日期比較:小於 date1 < date2
<= 日期比較:小於 date1 <= date2
== 日期比較:相等 date1 == date2
!= 日期比較:不等 date1 != date2
> 日期比較:大於 date1 > date2
>= 日期比較:大於等於 date1 >= date2

 

日期增長1天的計算:

import datetime
the_day = datetime.datetime(2019,1,1)
one_day = datetime.timedelta(days=1)
the_next_day = the_day + one_day
the_next_day.date().isoformat()

# 結果爲:'2019-01-02'

 

● tzinfo對象。

tzinfo僅僅是一個基類,經過繼承tzinfo類和實現如下方法可建立一個時區。

操做 說明
tz.tzname(dt) 返回表明時區名稱的字符串,如:'Asia/Shanghai',入參dt是一個datetime對象或None。
tz.utcoffset(dt) 返回timedelta對象,表示本地時間與UTC時間的偏移,單位是分鐘。入參dt是一個datetime對象或None。
tz.fromutc(dt) 將入參dt(datetime對象)從UTC時間轉換爲本地時區,並返回一個新的datetime對象,此方法由datetime對象上的astimezne()方法調用,tzinfo已提供了默認實現,通常沒有必要從新定義此方法。
tz.dst(dt) 返回一個timedelta對象,表明夏令時(Daylight Saving Time)調整。若是沒有關於夏令時的信息,則返回None。入參dt是一個datetime對象或None。

 

示例如何定義一個新的時區:

import datetime
class MyZone(datetime.tzinfo):
    TZOFFSET = 8    # 與UTC相差8小時
    def utcoffset(self, dt):
        return datetime.timedelta(hours=TZOFFSET)
        
    def tzname(self, dt):
        return 'Asia/Shanghai'

 

 

 

 

 (2)time模塊

time模塊提供與時間相關的各類函數。在Python中,測量時間的方法是計算從「紀元開始」的秒數,在time=0秒的時刻稱爲:epoch。在類UNIX上,「紀元開始」爲1970年1月1日,其餘系統上由time.gmtime(0)決定。

 

● struct_time對象

time模塊常常會用到struct_time對象,它具備如下屬性:

屬性 屬性
tm_year 年份4位數 tm_wday 星期幾(0~6),0表示星期一
tm_mon 月(1~12) tm_yday 一年中第幾天(1~366)
tm_mday 日(1~31) tm_isdst 夏令時(-一、0、1)
tm_hour 時(0~23)    
tm_min 分(0~59)    
tm_sec 秒(0~61)    

 

time模塊的常量和函數:

名稱 說明
模塊常量
tzname 包含「本地時區」和「本地夏令時時區」的名稱的元組。
timezone 本地的(非夏令時)時區。
altzone 夏令時期間使用的時區。
daylight 若是定義了夏令時時區,它將被設爲一個非0值。
函數
time.time() 返回當前UTC時間,形式是從「紀元開始」的秒數(浮點數)。
time.mktime(tuple) 入參爲一個struct_time對象(或相似的元組),將其轉換爲從「紀元開始」的秒數(浮點數)。若是輸入的不是有效時間,將引起OverflowError異常。
time.ctime([secs]) 將從「紀元開始」計算的秒數形式的時間,轉換爲表明本地時間的字符串。與asctime(localtime(secs))相同。若是省略入參secs,就會使用當前時間。
time.asctime([tuple]) 將gmtime()或localtime()函數返回的時間元組,轉換爲'Mon Jan 1 12:00:00 2019'格式的字符串。若是省略入參secs,就會使用當前時間。
time.gmtime([secs]) 將從「紀元開始」計算的秒數形式的時間,轉換爲UTC時間,返回爲struct_time對象。若是省略入參secs,就會使用當前時間。
time.localtime([secs]) 將從「紀元開始」計算的秒數形式的時間,轉換爲本地時區時間,返回爲struct_time對象。若是省略入參secs,就會使用當前時間。
time.strftime(format [,tm]) 將一個struct_time格式的時間,轉換爲format定義的字符串形式。 format格式說明
time.strptime(string [,format]) 解析一個表明時間的字符串,而後返回一個struct_time對象。format格式默認爲'%a %b %d %H:%M:%S %Y'。若是不能解析字符串,就會引起ValueError異常。 format格式說明
time.sleep(secs) 讓當前進程進入睡眠狀態並持續secs秒鐘,secs是一個浮點數。
time.tzset() 基於UNIX上TZ環境變量的值重置時區設置。

 

● format 格式說明

指令 含義 指令 含義
%Y 年(四位數) %c 地區的日期時間完整表示,如:'Sat Jan 1 00:00:00 2000 '
%y 年(2位數) %x 本地區的日期表示,如:'12/31/99'
%m 月(01~12) %X 本地區的時間表示,如:'01:02:03'
%d 日(01~31) %a 地區縮寫形式的星期幾字符串
%H 時(00~23) %A 地區完整的星期幾字符串
%I 時(01~12) %b 地區縮寫形式的月份字符串
%M 分(00~59) %B 地區完整形式的月份字符串
%S 秒(00~59) %Z 時區名稱(如不存在則爲空字符串)
%p 上午或下午(AM / PM) %% 百分號字符
%w 星期幾(0~6),0表示星期天    
%j 一年中第幾天(001~366)    
%U 一年中第幾周(00~53),星期天爲首日    
%W 一年中第幾周(00~53),星期一爲首日    

 

 

返回目錄

相關文章
相關標籤/搜索