datetime模块源码解读
datetime模块是基本日期和时间类型,提供了以简单和复杂的方式操作日期和时间的类.可以进行输出格式化操作.
日期和时间对象有两种: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 对象都被认为是真的。
实例方法:
date.replace方法
date.replace(year = self.year,month = self.month,day = self.day): 返回具有相同值的日期.
- date.timetuple():返回元组类型的本地时间.
- date.toordinal(): 返回日期的公历序数.
- date.weekday() 以星期为单位返回星期几.其中星期一为0,星期日为6.
- date.isoweekday():以星期为单位返回星期几,星期一为1,星期日为7.
- date.isocalendar():返回3元组(月份,周,工作日)
- date.isoformat(): 返回表示ISO 8601格式的日期字符串'YYYY-MM-DD'.
- date.str(): 对于日期d,str(d)相当于d.isoformat().
- date.ctime() : 返回表示日期的字符串.
- date.strftime(format): 返回表示日期的字符串,由显式格式字符串控制。引用小时,分钟或秒的格式代码将显示0值.
date.format(format):和date.strftie()相同.
- 计算事件天数
参考libdate.py文件.
timedelta对象
timedelta对象表示的持续时间,两个日期或时间之间的差.
class datetime.timedelta(days = 0,seconds = 0,microseconds = 0,milliseconds = 0,minutes = 0,hours = 0,weeks = 0
参数可以是整数,浮点数,正数或负数.
- 参数转换:
毫秒转换为1000微秒。一分钟转换为60秒。一小时转换为3600秒。一周转换为7天
类属性:
- 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 : 时区的名字(不存在就为空字符)%% : '%'字符.