datetime模块常量:

datetime.MINYEAR:一个date或一个datetime对象中允许的最小年份数。 MINYEAR是1。
datetime.MAXYEAR: MAXYEAR是9999。

datetime可用类型:
子类关系:
object
    timedelta
    tzinfo
    time
    date
        datetime

类 datetime.date: 属性:year,month,和 day。
类 datetime.time: 属性:hour,minute,second,microsecond,和tzinfo。
类 datetime.datetime: 属性:year,month, day,hour,minute,second,microsecond,和tzinfo。

类 datetime.timedelta: 表达两者之间的持续时间或差值,date,time或datetime实例微秒的分辨率。
类 datetime.tzinfo: 时区信息对象的抽象基类。

date对象

class datetime.date(year, month, day)

注: 所有参数都是必需的。参数可以是整数或长整数。

MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= number of days in the given month and year

如果给出超出这些范围的参数,ValueError则引发。

其他构造函数,所有类方法:

classmethod date.today(): 返回当前的本地日期。

类属性:

date.min: 最小的可表示日期。date(MINYEAR, 1, 1)
date.max: 最大的可表示日期。date(MAXYEAR, 12, 31)
date.resolution: 非相等日期对象之间可能存在的最小差异, timedelta(days=1)。

实例属性(只读):

date.year
date.month
date.day

支持的操作:

date2 = date1 + timedelta
date2 = date1 - timedelta
timedelta = date1 - date2
date1 < date2

实例方法:

date.replace(year, month, day)
date.weekday(): 返回星期几,其中星期一为0,星期日为6。
date.isoweekday(): 返回星期几,星期一为1,星期日为7。
date.isocalendar(): 返回3元组(ISO年份,ISO周编号,ISO工作日)。
date.isoformat(): 返回表示ISO 8601格式的日期字符串’YYYY-MM-DD’。例如:date(2002, 12, 4).isoformat() ==> ‘2002-12-04’
date.str(): 对于日期d,str(d)相当于d.isoformat()。
date.ctime(): 返回表示日期的字符串。例如:date(2002, 12, 4).ctime() ==> ‘Wed Dec 4 00:00:00 2002’
date.strftime(格式): 返回表示日期的字符串,由显式格式字符串控制。
date.format(格式): 同上date.strftime(格式)

# 日期格式化(strftime、format)
>>> d.strftime("%d/%m/%y")
'11/03/02'

>>> d.strftime("%A %d. %B %Y")
'Monday 11. March 2002'

>>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
'The day is 11, the month is March.'

datetime对象

class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])

注: 年,月,日参数是必需的。 tzinfo可以是None,或者是tzinfo子类的实例。其余参数可以是int或long

MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= number of days in the given month and year
0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000

如果给出超出这些范围的参数,ValueError则引发。

其他构造函数,所有类方法:

classmethod datetime.today(): 返回当前的本地日期时间。
classmethod datetime.now([ tz ] ): 返回当前的本地日期和时间。
classmethod datetime.utcnow(): 返回当前的UTC日期和时间。

类属性:

datetime.min: 最小的datetime,datetime(MINYEAR, 1, 1, tzinfo=None)
datetime.max: 最大的datetime,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
datetime.resolution: 不等datetime之间可能存在的最小差异:timedelta(microseconds=1)。

实例属性(只读):

datetime.year
datetime.month
datetime.day
datetime.hour
datetime.minute
datetime.second
datetime.microsecond
datetime.tzinfo: 该对象作为tzinfo参数传递给datetime构造函数,或者None如果没有传递。

支持的操作:

datetime2 = datetime1 + timedelta
datetime2 = datetime1 - timedelta
timedelta = datetime1 - datetime2
datetime1 < datetime2

实例方法:

datetime.date(): 返回date同年,月,日的对象。
datetime.time(): 返回time以相同的小时,分钟,秒和微秒对象。 tzinfo是None。
datetime.timetz(): 返回time具有相同小时,分钟,秒,微秒和tzinfo属性的对象。
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
datetime.weekday(): 返回星期几,其中星期一为0,星期日为6
datetime.isoweekday(): 返回星期几,其中星期一为1,星期日为7
datetime.isocalendar(): 返回3元组(ISO年份,ISO周编号,ISO工作日)
datetime.isoformat([ sep ] ): 返回表示ISO 8601格式的日期和时间的字符串,YYYY-MM-DDTHH:MM:SS.mmmmmm
datetime.str(): 对于datetime实例d,str(d)相当于 。d.isoformat(’ ')
datetime.ctime(): 返回表示日期和时间的字符串。相
datetime.strftime(格式)
datetime.format(格式): 同上datetime.strftime(格式)

>>> from datetime import datetime, date, time
>>> #使用构造函数combine()创建datetime对象
>>> d = date(2005, 7, 14)
>>> t = time(12, 30)
>>> datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)

>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
>>> dt
datetime.datetime(2006, 11, 21, 16, 30)

>>> dt.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'

>>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
'The day is 21, the month is November, the time is 04:30PM.'

time对象

class datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

注: 所有参数都是可选的。 tzinfo可以是None,或者是tzinfo子类的实例 。其余参数可以是int或long

0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000。

如果给出超出这些范围的参数,ValueError则引发。tzinfo,默认为None。

类属性:

time.min: 最小的time,time(0, 0, 0, 0)
time.max: 最大的time,time(23, 59, 59, 999999)
time.resolution: 不相等time对象 之间可能存在最小差异。

实例属性(只读):

time.hour
time.minute
time.second
time.microsecond
time.tzinfo: 该对象作为tzinfo参数传递给time构造函数,如果没有传递,为 None。

实例方法:

time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
time.isoformat(): 返回表示ISO 8601格式的时间的字符串,HH:MM:SS.mmmmmm
time.str(): 时间t,str(t)相当于t.isoformat()。
time.strftime(格式): 返回表示时间的字符串,由显式格式字符串控制。
time.format(格式): 同上time.strftime(格式)

timedelta对象

表示,两个日期或时间之间的持续时间或差。

class datetime.timedelta([ days [,seconds [,microseconds [,milliseconds [,minutes [,hours [,week ] ] ] ] ] ] ] )

注: 所有参数都是可选的,默认为0。参数可以是整数,长整数或浮点数,也可以是正数或负数。

0 <= microseconds < 1000000
0 <= seconds < 3600*24 (一天中的秒数)
-999999999 <= days <= 999999999
举例:
>>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
timedelta的类属性:

timedelta.min: 最小的timedelta对象,timedelta(-999999999)。
timedelta.max: 最大的timedelta对象,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)

支持的操作:

+、-、*、 //、
abs(t): 返回绝对值
str(t): 返回表单中的字符串
repr(t): 返回表单中的字符串

timedelta类的实例方法:

timedelta.total_seconds(): 返回持续时间中包含的总秒数。

>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> another_year = timedelta(weeks=40, days=84, hours=23,
...                          minutes=50, seconds=600)  # adds up to 365 days
>>> year.total_seconds()
31536000.0
>>> year == another_year
True

>>> ten_years = 10 * year
>>> ten_years, ten_years.days // 365
(datetime.timedelta(3650), 10)
>>> nine_years = ten_years - year
>>> nine_years, nine_years.days // 365
(datetime.timedelta(3285), 9)
>>> three_years = nine_years // 3;
>>> three_years, three_years.days // 365
(datetime.timedelta(1095), 3)

>>> abs(three_years - ten_years) == 2 * three_years + year
True

tzinfo对象

类datetime.tzinfo
这是一个抽象基类,这意味着不应该直接实例化此类。

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))
beijing = datetime.now(tz=UTC(8))
#曼谷时间
# bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
bangkok = datetime.now(tz=UTC(7))

#北京时间转成曼谷时间
beijing.astimezone(UTC(7))
#计算时间差时也会考虑时区的问题
timespan = beijing - bangkok

strftime()和strptime()行为

date,datetime和time对象都支持 strftime(format)方法,以创建一个表示显式格式字符串控制下的时间的字符串。

form datetime import datetime
d = datetime.today()   # 2018-11-24 00:29:40.906000

%a  星期_缩写(例如:d.strftime("%a")     输出: Sat)
	Sun、Mon、Tue、Wed、Thu、Fri、Sat
%A	星期_全拼(例如:d.strftime("%A")     输出: Saturday)
	Sunday、Monday、Tuesday、Wednesday、Thursday、Friday、Saturday
%w	星期_十进制数(例如:d.strftime("%w")     输出: 6)
	0、1、2、3、4、5、6

%d	作为零填充十进制数的月中的某一天。	01,02,...,31	
 
%b	月份_缩写(例如:d.strftime("%b")     输出: Nov)
	Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec
%B	月份_全拼(例如:d.strftime("%B")     输出: November)
	January、February、March、April、May、June
	July、August、September、October、November、December
%m	月份_十进制数(0填充)(例如:d.strftime("%m")     输出: 11)
	01、02、03、04、05、06、07、08、09、10、11、12

%y	年份_没有世纪(例如:d.strftime("%y")     输出: 18) 
%Y	年份_有世纪(例如:d.strftime("%Y")     输出: 2018) 

%H	小时(24小时制)。	00,01,...,23	 
%I	小时(12小时制)。	01,02,...,12	 
%p	Locale相当于AM或PM(与%I一起使用)。	

%M	分钟。	00,01,...,59	 
%S	秒。	00,01,...,59
%f	微秒。	000000,000001,...,999999

%j	一年中的第几天。	001,002,...,366	 (例如:d.strftime("%j")     输出: 328)
%U	一年中的第几周(星期日作为一周的第一天)。在第一个星期日之前的新年中的所有日子都被认为是在第0周。	00,01,...,53	(例如:d.strftime("%U")     输出: 46)
%W	一年中的第几周(星期一作为一周的第一天)。在第一个星期一之前的新年中的所有日子都被认为是在第0周。	00,01,...,53	(例如:d.strftime("%W")     输出: 47)

%c	Locale的适当日期和时间表示。(例如:d.strftime("%c")     输出: 11/24/18 01:05:56)	

%x	Locale的适当日期表示。(例如:d.strftime("%x")     输出: 11/24/18)	
%X	Locale的适当时间表示。(例如:d.strftime("%X")     输出: 01:05:56)	

%z	UTC偏移量,格式为+ HHMM或-HHMM(如果对象是naive,则为空字符串)。	(空),+ 0000,-0400,+ 1030
%Z	时区名称(如果对象是naive,则为空字符串)。	(空),UTC,EST,CST

strftime与strptime 的区别

strftime(): 将时间格式化!!!,或者说格式化一个时间字符串。
strptime(): 按照特定时间格式将字符串转换(解析)为时间类型。