寫程式時遇到了記錄日期、時間,比較時間早晚的需求,考慮用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對象;
datetime類提供的執行個體方法與屬性(很多屬性或方法在date和time中已經出現過):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.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篇