datetime模塊源碼解讀
datetime模塊是基本日期和時間類型,提供了以簡單和復雜的方式操作日期和時間的類.可以進行輸出格式化操作.<!-- more -->
日期和時間對象有兩種:naive 和 aware .
datetime并且time 對象具有可選的時區信息屬性,tzinfo可以將其設置為抽象tzinfo類的子類的實例.
常量
- datetime.MINYEAR: 一個date或一個datetime對象中允許的最小年份數。 MINYEAR是1.
- datetime.MAXYEAR: 一個date或一個datetime對象中允許的最大年份數。 MAXYEAR是9999.
可用類的類型
- class datetime.date
- 理想化的天真日期,屬性: year,month,和 day。
- class datetime.time
- 理想化的時間.屬性: hour,minute,second,microsecond,和tzinfo.
- class datetime.datetime
- 日期和時間的組合。屬性:year,month, day,hour,minute,second,microsecond,和tzinfo。
- class datetime.timedelta
- 表達兩者之間的差異的持續時間date,time或datetime實例微秒的分辨率
- class datetime.tzinfo
- 時區信息對象的抽象基類。這些由 datetime和和time類一起用于提供可定制的時間調整概念.
- class datetime.timezone
- 將tzinfo抽象基類實現為與UTC的固定偏移量的類.
date類的類方法和類屬性
一個date對象代表一個理想化的日歷日期(年,月,日),當前的公歷無限期延長兩個方向。1年1月1日稱為第1天,1年1月2日稱為第2天
-
類方法:
- datetime.date(year, month, day) 參數是必需的,可以是整數.
- date.today() 返回今天的日期.
- date.fromtimestamp() 返回與POSIX時間戳對應的本地日期.
- date.fromordinal() 返回對應于公歷格里高利序數的日期.
-
類屬性:
- date.min屬性: 表示最早的月日(1.1)
- date.max屬性: 最晚的月日(12.31)
- date.resolution: 非相等日期對象之間可能存在的最小差異, timedelta(days=1)。
- 實例屬性(只讀):
- date.year 打印年份.
- date.month: 月份(1-12月)
- date.day: 給定年份的給定月份的1和之間的天數.
注意: 日期可以用作字典鍵。在布爾上下文中,所有date 對象都被認為是真的。
實例方法:
參考libdate.py文件.
timedelta對象
timedelta對象表示的持續時間,兩個日期或時間之間的差.
class datetime.timedelta(days = 0,seconds = 0,microseconds = 0,milliseconds = 0,minutes = 0,hours = 0,weeks = 0
參數可以是整數,浮點數,正數或負數.
類屬性:
- timedelta.min : 負數的timedelta對象.
- timedelta.max : 最大的timedelta對象.
- timedelta.resolution : 非平等timedelta物體之間可能存在的最小差異.
實例屬性
實例屬性(只讀)
- days 介于-999999999和999999999之間.
- seconds: 介于0和86399之間.
- microseconds: 介于0和999999之間.
timedelta對象還支持使用date和datetime 對象進行某些添加和減少.
timedelta對象是可散列的(可用作字典鍵).
- 實例方法:
- timedelta.total_seconds(): 返回持續時間中包含的總秒數
datetime對象
包含來自所有信息的單個對象date的對象和time對象。
- 構造函數:
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
年,月,日參數是必需的。 tzinfo可以是None,或者是tzinfo子類的實例。其余參數可以是整數.
datetime對象的類方法
- datetime.today(): 返回當前的本地日期時間.
- datetime.now(tz = None): 返回當前的本地日期和時間.
- datetime.utcnow(): 返回當前的UTC日期和時間.
- datetime.fromtimestamp(timestamp,tz = None):返回與POSIX時間戳對應的本地日期和時間.
- datetime.utcfromtimestamp(timestamp): 返回與datetimePOSIX時間戳對應 的UTC.
- datetime.fromordinal(ordinal): 返回datetime相應的公歷格里高利序數,其中第1年1月1日有序數1.
- datetime.combine(date, time, tzinfo=self.tzinfo): 返回一個新datetime對象,其日期組件等于給定date對象,其時間組件等于給定time對象.
- datetime.strptime(date_string, format): 返回datetime對應的date_string,根據格式解析.
datetime對象的類屬性
- datetime.min: 最早的datetime,日期和時間.
- datetime.max: 最晚的datetime,日期和時間.
- datetime.resolution: 非平等datetime物體之間可能存在的最小差異.
實例屬性
實例屬性(只讀)
- datetime.year: 年
- datetime.month: 介于1到12之間.
- datetime.day: 在給定年份的給定月份的1和之間的天數.
- datetime.hour: 范圍(24小時)
- datetime.minute:60分鐘.
- datetime.second: 60秒.
- datetime.microsecond: 1000000毫秒.
- datetime.tzinfo: 該對象作為tzinfo參數傳遞給datetime構造函數.
- datetime.fold: 用于消除重復間隔期間的偏移時間.
datetime對象可以用作字典鍵.
實例方法
- datetime.date(): 返回年月日的對象.
- datetime.time(): 以相同的小時,分鐘,秒,微秒和折疊返回對象。折疊值被復制到返回的time對象.
- datetime.timetz(): 返回time具有相同小時,分鐘,秒,微秒,折疊和tzinfo屬性的對象.
-
datetime.replace()
datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
返回具有相同屬性的日期時間.
- datetime.astimezone(tz=None): 返回datetime具有新tzinfo屬性tz的對象,調整日期和時間數據.tz必須是tzinfo子類的實例.
- datetime.utcoffset(): 如果tzinfo是None,則返回None,否則返回 self.tzinfo.utcoffset(self),并在后者未返回時引發異常None,或者timedelta表示大小小于一天的整數分鐘的對象.
- datetime.dst(): 如果tzinfo是None,則返回None,否則返回 self.tzinfo.dst(self),并在后者未返回時引發異常 None,或者timedelta表示大小小于一天的整數分鐘的對象。
- datetime.tzname(): 如果tzinfo是None,則返回None,否則返回 self.tzinfo.tzname(self),如果后者不返回None或者是字符串對象,則引發異常.
- datetime.timetuple():返回time.struct_time
- datetime.utctimetuple():
- datetime.toordinal(): 返回日期的格里高利序數.
- datetime.timestamp(): 返回與datetime 實例對應的POSIX時間戳.該timestamp()方法使用該fold屬性消除重復間隔期間的時間歧義.
- datetime.weekday(): 以星期為單位返回星期幾,其中星期一為0.
- datetime.isoweekday(): 以星期為單位返回星期幾,星期一為1.
- datetime.isocalendar(): 返回3元組(年,星期編號,工作日)
- datetime.isoformat(sep ='T',timespec ='auto'): 返回表示ISO 8601格式的日期和時間的字符串.
- datetime.str(): 相當于d.isoformat(' ')
- datetime.ctime(): 返回表示日期和時間的字符串.
- datetime.strftime(format): 返回表示日期和時間的字符串,由顯式格式字符串控制.
- datetime.format(format): 返回表示日期和時間的字符串,由顯式格式字符串控制.
time對象
time對象表示一天中的時間,可以通過tzinfo對象調整.
class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
類屬性
- time.min: 最早的時間.
- time.max: 最新的時間.
- time.resolution: 非相等time對象 之間可能存在最小差異.
實例屬性
實例屬性(只讀)
- time.hour: 24小時.
- time.minute: 60分鐘
- time.second: 60s
- time.microsecond: 1000000
- time.tzinfo: 該對象作為tzinfo參數傳遞給time構造函數
- time.fold: 消除重復間隔期間的墻壁時間.
實例方法
-
time.replace方法
time.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
返回time具有相同值的a
- time.isoformat(timespec ='auto'): 返回表示ISO 8601格式的時間的字符串.
- time.strftime(format): 返回表示時間的字符串,由顯式格式字符串控制.
timezone 對象
每一個實例,其中表示通過從UTC的固定偏移定義的時區.
class datetime.timezone(offset, name=None)
所述偏移參數必須被指定為timedelta 代表的本地時間和UTC之間的差對象
timezone.utcoffset(dt): 返回timezone構造實例時指定的固定值.
timezone.tzname(dt): 返回timezone構造實例時指定的固定值.
timezone.dst(dt): 返回None.
類屬性:
timezone.utc
UTC時區,timezone(timedelta(0))。
format time結構化表示
%a : 簡化星期名稱
%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 : 時區的名字(不存在就為空字符)
%% : '%'字符.