概述
datatime模塊重新封裝了time模塊,提供更多接口,datetime庫定義了2個常量和5個類。
2個常量分別是MINYEAR=1和MAXYEAR=9999。
5個類分別是:
- date類:表示日期的類
- time類:表示時間的類
- datetime類:表示時間日期的類
- timedelta類:表示兩個datetime對象的差值;
- tzinfo類:表示時區的相關信息
datetime的5個類詳解:
1、date類
date類包含三個參數,分別爲year,month,day,返回格式爲year-month-day。
構造函數
__new__(year,month,day):默認的構造函數,創建date類的對象時直接傳入year,month,day三個參數即可返回對應的日期。
fromtimestamp(t):使用時間戳構造對象,使用方法爲:datetime.date.fromtimestamp(t),傳入參數t爲一個時間戳,返回時間戳t對應的日期。
today():使用今天的日期構造對象,使用方法爲:datetime.date.today(),無參數,返回今天的日期。
fromordinal(n):使用日期序數構造對象,使用方法爲:datetime.date.fromordinal(n),傳入參數爲一個整數序數,代表從公元1年1月1日開始的序數,序數每增加1代表增加1天,返回最終計算出的日期。
方法
- timetuple():返回日期對應的time.struct_time對象,格式爲time.struct_time(tm_year=1, tm_mon=1, tm_mday=2, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=2, tm_isdst=-1) 。
- toordinal():相當於fromordinal(n)的逆過程,返回值即爲fromordinal(n)中的日期序數n。
- weekday():返回該日期對應星期幾,用[0,6]代表星期一到星期日。
- isoweekday():作用同weekday(),用[1,7]代表星期一到星期日。
- isocalendar():返回一個三元組,格式爲(year,week_number,weekday),分別代表年,第幾周,星期幾。
- isoformat():返回標準日期格式:YYYY-MM-DD。
- ctime():返回格式爲:Sat Sep 8 00:00:00 2018
- strftime(format):把日期按照format指定的格式進行格式化,具體的格式化符號如下。
- replace(year,month,day):傳入參數爲year,month,day,返回對應的新日期。
%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 當前時區的名稱 %% %號本身
示例
from datetime import *
import time
print('date.max:', date.max) # date.max: 9999-12-31
print('date.min:', date.min) # date.min: 0001-01-01
print('date.today():', date.today()) # date.today(): 2016-10-26
print('date.fromtimestamp():', date.fromtimestamp(time.time())) # date.fromtimestamp(): 2016-10-26
now = date(2016, 10, 26)
tomorrow = now.replace(day = 27)
print('now:', now, ', tomorrow:', tomorrow) # now: 2016-10-26 , tomorrow: 2016-10-27
print('timetuple():', now.timetuple()) # timetuple(): time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=300, tm_isdst=-1)
print('weekday():', now.weekday()) # weekday(): 2
print('isoweekday():', now.isoweekday()) # isoweekday(): 3
print('isocalendar():', now.isocalendar()) # isocalendar(): (2016, 43, 3)
print('isoformat():', now.isoformat()) # isoformat(): 2016-10-26
print('strftime():', now.strftime("%Y-%m-%d"))# strftime(): 2016-10-26
2、time類
time類包含六個參數,分別爲hour,minute,second,microsecond,tzinfo,fold,返回格式爲hour:minute:second(.microsecond)。
構造函數
__new__(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, fold=0):默認的構造函數,創建time類的對象時直接傳入相應參數即可返回對應的時間。
方法
- isoformat():返回標準時間格式:HH:MM:SS.mmmmmm+zz:zz。
- strftime(format):把時間按照format指定的格式進行格式化,具體的格式化符號與date類中介紹的相同。
- utcoffset():返回timezone的偏移量。
- tzname():返回timezone的名稱。
- replace():傳入對應的參數,返回新的時間。
示例
from datetime import *
tm = time(23, 46, 10)
print('tm:', tm)
print('hour: %d, minute: %d, second: %d, microsecond: %d' % (tm.hour, tm.minute, tm.second, tm.microsecond))
tm1 = tm.replace(hour=20)
print('tm1:', tm1)
print('isoformat():', tm.isoformat())
print('strftime()', tm.strftime("%X"))
# tm: 23:46:10
# hour: 23, minute: 46, second: 10, microsecond: 0
# tm1: 20:46:10
# isoformat(): 23:46:10
# strftime() 23:46:10
3、datetime類
datetime類是date類和time類的合體,包含前兩個類的全部參數。
構造函數
__new__(year, month, day, hour=0, minute=0, second=0,microsecond=0, tzinfo=None, fold=0):默認的構造函數,創建datetime類的對象時直接傳入相應參數即可返回對應的時間日期。
fromtimestamp(t):使用時間戳構造對象,傳入參數t爲一個時間戳,返回時間戳t對應的日期和時間。
utcfromtimestamp(t):使用時間戳構造對象,傳入參數t爲一個時間戳,返回時間戳t對應的UTC(時間標準時間)日期和時間。
now():使用當前日期和時間構造對象,無參數,返回當前的日期和時間。
utcnow():使用當前日期和時間構造對象,無參數,返回當前的UTC(時間標準時間)日期和時間。
combine(date,time):使用date和time構造對象,傳入參數爲1個date對象和1個time對象,返回計算出的日期。
方法
- timetuple():返回日期時間對應的time.struct_time對象,格式爲time.struct_time(tm_year=1973, tm_mon=11, tm_mday=29, tm_hour=21, tm_min=33, tm_sec=9, tm_wday=3, tm_yday=333, tm_isdst=-1) 。
- utctimetuple():與timetuple()相似,返回日期時間對應的UTC(時間標準時間)time.struct_time對象。
- astimezone():返回的格式中加入時區信息,格式爲:1973-11-29 21:33:09+08:00。
- date():返回date部分
- time():返回time部分,tzinfo設置爲None。(另有timetz()方法返回有相同tzinfo的time())
- isoformat(sep):返回標準日期時間格式,傳入參數sep可設置日期和時間的分隔符,默認爲'T':1973-11-29T21:33:09。
- ctime():返回格式爲:Sat Sep 8 00:00:00 2018
- strftime(format):把日期按照format指定的格式進行格式化,具體的格式化符號與date類中介紹的相同。
- strptime(date_string,format):將字符串格式轉換爲日期格式,具體的格式化符號與date類中介紹的相同。
- replace():傳入對應的參數,返回新的日期時間。
示例
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(): 2016-10-26 23:12:51.307000
# now(): 2016-10-26 23:12:51.307000
# utcnow(): 2016-10-26 15:12:51.307000
# fromtimestamp(tmstmp): 2016-10-26 23:12:51.307000
# utcfromtimestamp(tmstmp): 2016-10-26 15:12:51.307000
4、timedelta類
timedelta類代表兩個datetime對象之間的時間差。
構造函數
__new__(days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0):默認的構造函數,創建timedelta類的對象時直接傳入相應參數即可返回對應單位的時間差。
方法
- 支持兩個timedelta對象之間的加、減操作。
- 支持對一個timedelta進行取正、取負、取絕對值等操作。
- 支持兩個timedelta對象之間的比較。
- 支持一個timedelta對象乘以、除以一個整數的操作
示例
# coding:utf-8
from datetime import *
dt = datetime.now()
dt1 = dt + timedelta(days=-1) # 昨天
dt2 = dt - timedelta(days=1) # 昨天
dt3 = dt + timedelta(days=1) # 明天
delta_obj = dt3-dt
print(type(delta_obj),delta_obj) # <type 'datetime.timedelta'> 1 day, 0:00:00
print(delta_obj.days ,delta_obj.total_seconds()) # 1 86400.0
5、tzinfo類
tzinfo類是一個虛擬基類,代表時區(time zone),創建子類時必須重寫name(),utcoffset(),dst()這三個方法。
#! /usr/bin/python
# coding=utf-8
from datetime import datetime, tzinfo,timedelta
"""
tzinfo是關於時區信息的類
tzinfo是一個抽象類,所以不能直接被實例化
"""
class UTC(tzinfo):
"""UTC"""
def __init__(self,offset = 0):
self._offset = offset
def utcoffset(self, dt):
return timedelta(hours=self._offset)
def tzname(self, dt):
return "UTC +%s" % self._offset
def dst(self, dt):
return timedelta(hours=self._offset)
#北京時間
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
#曼谷時間
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
#北京時間轉成曼谷時間
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))
#計算時間差時也會考慮時區的問題
timespan = beijing - bangkok
print "時差:",timespan
#Output==================
# beijing time: 2011-11-11 00:00:00+08:00
# bangkok time 2011-11-11 00:00:00+07:00
# beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
# 時差: -1 day, 23:00:00