天天看點

python datetime子產品處理時間

寫程式時遇到了記錄日期、時間,比較時間早晚的需求,考慮用datetime子產品來實作。

datetime子產品定義了下面這幾個類:
  • datetime.date:表示日期的類。常用的屬性有year, month, day;
  • datetime.time:表示時間的類。常用的屬性有hour, minute, second, microsecond;
  • datetime.datetime:表示日期時間。
  • datetime.timedelta:表示時間間隔,即兩個時間點之間的長度。
  • datetime.tzinfo:與時區有關的相關資訊。(這裡不詳細充分讨論該類,感興趣的童鞋可以參考python手冊)

    注 :上面這些類型的對象都是不可變(immutable)的。

我的需求涉及日期和時間,是以選用datetime類。

datetime是date與time的結合體,包括date與time的所有資訊。它的構造函數如下:datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ),各參數的含義與date、time的構造函數中的一樣。

    datetime類定義的類屬性與方法:

  • datetime.min、datetime.max:datetime所能表示的最小值與最大值;
  • datetime.resolution:datetime最小機關;
  • datetime.today():傳回一個表示目前本地時間的datetime對象;
  • datetime.now([tz]):傳回一個表示目前本地時間的datetime對象,如果提供了參數tz,則擷取tz參數所指時區的本地時間;
  • datetime.utcnow():傳回一個目前utc時間的datetime對象;
  • datetime.fromtimestamp(timestamp[, tz]):根據時間戮建立一個datetime對象,參數tz指定時區資訊;
  • datetime.utcfromtimestamp(timestamp):根據時間戮建立一個datetime對象;
  • datetime.combine(date, time):根據date和time,建立一個datetime對象;
  • datetime.strptime(date_string, format):将格式字元串轉換為datetime對象;
使用例子:
from  datetime  import  *  
import  time  
  
print   'datetime.max:' , datetime.max  
print   'datetime.min:' , datetime.min  
print   'datetime.resolution:' , datetime.resolution  
print   'today():' , datetime.today()  
print   'now():' , datetime.now()  
print   'utcnow():' , datetime.utcnow()  
print   'fromtimestamp(tmstmp):' , datetime.fromtimestamp(time.time())  
print   'utcfromtimestamp(tmstmp):' , datetime.utcfromtimestamp(time.time())  
  
# ---- 結果 ----   
# datetime.max: 9999-12-31 23:59:59.999999   
# datetime.min: 0001-01-01 00:00:00   
# datetime.resolution: 0:00:00.000001   
# today(): 2010-04-07 09:48:16.234000   
# now(): 2010-04-07 09:48:16.234000   
# utcnow(): 2010-04-07 01:48:16.234000  # 中國位于+8時間,與本地時間相差8   
# fromtimestamp(tmstmp): 2010-04-07 09:48:16.234000   
# utcfromtimestamp(tmstmp): 2010-04-07 01:48:16.234000   
from datetime import *  
import time  
  
print 'datetime.max:', datetime.max  
print 'datetime.min:', datetime.min  
print 'datetime.resolution:', datetime.resolution  
print 'today():', datetime.today()  
print 'now():', datetime.now()  
print 'utcnow():', datetime.utcnow()  
print 'fromtimestamp(tmstmp):', datetime.fromtimestamp(time.time())  
print 'utcfromtimestamp(tmstmp):', datetime.utcfromtimestamp(time.time())  
  
# ---- 結果 ----  
# datetime.max: 9999-12-31 23:59:59.999999  
# datetime.min: 0001-01-01 00:00:00  
# datetime.resolution: 0:00:00.000001  
# today(): 2010-04-07 09:48:16.234000  
# now(): 2010-04-07 09:48:16.234000  
# utcnow(): 2010-04-07 01:48:16.234000  # 中國位于+8時間,與本地時間相差8  
# fromtimestamp(tmstmp): 2010-04-07 09:48:16.234000  
# utcfromtimestamp(tmstmp): 2010-04-07 01:48:16.234000 
           
    datetime類提供的執行個體方法與屬性(很多屬性或方法在date和time中已經出現過):
  • datetime.year、month、day、hour、minute、second、microsecond、tzinfo:
  • datetime.date():擷取date對象;
  • datetime.time():擷取time對象;
  • datetime. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]):
  • datetime. timetuple ()
  • datetime. utctimetuple ()
  • datetime. toordinal ()
  • datetime. weekday ()
  • datetime. isocalendar ()
  • datetime. isoformat ([ sep] )
  • datetime. ctime ():傳回一個日期時間的C格式字元串,等效于time.ctime(time.mktime(dt.timetuple()));
  • datetime. strftime (format)
  • format支援如下格式:
    """
    轉成字元串
    %y 兩位數的年份表示(00-99)
    %Y 四位數的年份表示(000-9999)
    %m 月份(01-12)
    %d 月内中的一天(0-31)
    %H 24小時制小時數(0-23)
    %I 12小時制小時數(01-12) 
    %M 分鐘數(00=59)
    %S 秒(00-59)
    
    %a 本地簡化星期名稱
    %A 本地完整星期名稱
    %b 本地簡化的月份名稱
    %B 本地完整的月份名稱
    %c 本地相應的日期表示和時間表示
    %j 年内的一天(001-366)
    %p 本地A.M.或P.M.的等價符
    %U 一年中的星期數(00-53)星期天為星期的開始
    %w 星期(0-6),星期天為星期的開始
    %W 一年中的星期數(00-53)星期一為星期的開始
    %x 本地相應的日期表示
    %X 本地相應的時間表示
    %Z 目前時區的名稱
    %% %号本身 
    """      

    兩個datetime對象可以直接進行比較,或者相減傳回一個時間間隔對象,或者日期時間加上一個間隔傳回一個新的日期時間對象。

參考文章:python datetime處理時間

其他參考文章:Python中時間的處理之——Time篇