datetime基本日期和时间类型的datetime对象详解(23)Python语言(必读进阶学习教程)(参考资料)
甲datetime
对象是包含来自所有信息的单个对象date
的对象和time
对象。像一个date
物体一样,datetime
假设当前的格里高利历在两个方向上延伸; 像时间对象一样,datetime
假设每天都有3600 * 24秒。
构造函数:
- class
datetime.
datetime
(年,月,日,小时= 0,分钟= 0,秒= 0,微秒= 0,tzinfo =无,*,折叠= 0 ) - 年,月,日参数是必需的。 tzinfo可以是
None
,或者是tzinfo
子类的实例。其余参数可以是整数,在以下范围内: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
,fold in [0, 1]
。
如果给出了超出这些范围的参数,
ValueError
则引发。版本3.6中的新功能:添加了
fold
参数。
其他构造函数,所有类方法:
- classmethod
datetime.
today
() - 返回当前的本地日期时间。这相当于。另见, 。
tzinfo
None
datetime.fromtimestamp(time.time())
now()
fromtimestamp()
- classmethod
datetime.
now
(tz = None ) - 返回当前的本地日期和时间。如果可选参数TZ被
None
或没有指定,这就像today()
,但是,如果可能的话,可以比从通过打算被供应得到更精确time.time()
的时间戳(例如,这可以是可能的平台上提供的Cgettimeofday()
函数)。如果tz不是
None
,则它必须是tzinfo
子类的实例,并且当前日期和时间将转换为tz的时区。在这种情况下,结果相当于tz.fromutc(datetime.utcnow().replace(tzinfo=tz))
。另见today()
,utcnow()
。
- classmethod
datetime.
utcnow
() - 返回当前的UTC日期和时间。这就像 ,但返回当前的UTC日期和时间,作为一个天真的 对象。通过调用可以获得知道的当前UTC日期时间。另见。
tzinfo
None
now()
datetime
datetime.now(timezone.utc)
now()
- classmethod
datetime.
fromtimestamp
(timestamp,tz = None ) - 返回与POSIX时间戳对应的本地日期和时间,例如返回的
time.time()
。如果可选参数TZ的None
或没有指定,时间戳转换为平台的本地日期和时间,返回的datetime
对象是幼稚的。如果tz不是
None
,则它必须是tzinfo
子类的实例,并且时间戳将转换为tz的时区。在这种情况下,结果相当于tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))
。fromtimestamp()
OverflowError
如果时间戳超出平台Clocaltime()
或gmtime()
功能支持的值范围,则可能会提升,或者OSError
打开localtime()
或gmtime()
失败。这种情况通常限制在1970年到2038年。请注意,在非POSIX系统中,在时间戳概念中包含闰秒,闰秒会被忽略fromtimestamp()
,然后可能有两个时间戳相差一秒钟产生相同的datetime
对象。另见utcfromtimestamp()
。在版本3.3中更改:如果时间戳超出平台C 或函数支持的值范围,则 升高
OverflowError
而不是。提高 而不是开启或 失败。ValueError
localtime()
gmtime()
OSError
ValueError
localtime()
gmtime()
在版本3.6中更改:
fromtimestamp()
可能会返回fold
设置为1的实例。
- classmethod
datetime.
utcfromtimestamp
(timestamp ) - 返回与
datetime
POSIX时间戳对应 的UTC 。这可能会提高,如果时间戳是出在平台的C支持的值范围的功能,并在故障。这种情况通常限于1970年至2038年。tzinfo
None
OverflowError
gmtime()
OSError
gmtime()
要获得有意识的
datetime
对象,请致电fromtimestamp()
:datetime.fromtimestamp(timestamp, timezone.utc)
在POSIX兼容平台上,它等效于以下表达式:
datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
除了后者式总是支持全范围岁:之间
MINYEAR
和MAXYEAR
包容。在版本3.3中更改:如果时间戳超出平台C 函数支持的值范围,则 升高
OverflowError
而不是。提高,而不是对失败。ValueError
gmtime()
OSError
ValueError
gmtime()
- classmethod
datetime.
fromordinal
(序数) - 返回
datetime
相应的公历格里高利序数,其中第1年1月1日有序数1.ValueError
除非。结果的小时,分钟,秒和微秒都是0,并且是。1 <= ordinal <= datetime.max.toordinal()
tzinfo
None
- classmethod
datetime.
combine
(date,time,tzinfo = self.tzinfo ) - 返回一个新
datetime
对象,其日期组件等于给定date
对象,其时间组件等于给定time
对象。如果提供了tzinfo参数,则其值用于设置tzinfo
结果的tzinfo
属性,否则使用time参数的属性。对于任何
datetime
对象d , . 如果date是 对象,则忽略其时间组件和属性。d == datetime.combine(d.date(),d.time(), d.tzinfo)
datetime
tzinfo
版本3.6中已更改:添加了tzinfo参数。
- classmethod
datetime.
fromisoformat
(date_string ) - 以和所发出的格式之一返回
datetime
对应于date_string的对应项。具体来说,此函数支持格式的字符串 ,其中可以匹配任何单个字符。date.isoformat()
datetime.isoformat()
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
*
警告
这不支持解析任意ISO 8601字符串 – 它仅用作反向操作
datetime.isoformat()
。版本3.7中的新功能。
- classmethod
datetime.
strptime
(date_string,format ) - 返回
datetime
对应的date_string,根据格式解析 。这相当于。如果无法解析date_string和format,或者它返回的值不是时间元组,则会引发此问题。有关格式化指令的完整列表,请参阅 strftime()和strptime()行为。datetime(*(time.strptime(date_string, format)[0:6]))
ValueError
time.strptime()
类属性:
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
- 间
MINYEAR
和MAXYEAR
包容性。
datetime.
month
- 介于1到12之间。
datetime.
day
- 在给定年份的给定月份中的1和之间的天数。
datetime.
hour
- 在
range(24)
。
datetime.
minute
- 在
range(60)
。
datetime.
second
- 在
range(60)
。
datetime.
microsecond
- 在
range(1000000)
。
datetime.
tzinfo
- 该对象作为tzinfo参数传递给
datetime
构造函数,或者None
如果没有传递。
datetime.
fold
- 在。用于在重复间隔期间消除墙壁时间的歧义。(当在夏令时结束时或当前区域的UTC偏移因政治原因而减少时,会发生重复间隔。)值0(1)表示两个时刻的早期(稍后)相同的墙时间表示。
[0, 1]
版本3.6中的新功能。
支持的操作:
手术 | 结果 |
---|---|
datetime2 = datetime1 + timedelta |
(1) |
datetime2 = datetime1 - timedelta |
(2) |
timedelta = datetime1 - datetime2 |
(3) |
datetime1 < datetime2 |
比较datetime 到 datetime 。(4) |
-
datetime2是从datetime1中删除的timedelta的持续时间,如果
timedelta.days
> 0 则向前移动,或者如果timedelta.days
<0则向后移动。结果tzinfo
与输入datetime 具有相同的属性,datetime2 – datetime1 == timedelta after。OverflowError
如果datetime2.year小于MINYEAR
或大于, 则引发MAXYEAR
。请注意,即使输入是有意识的对象,也不会进行时区调整。 -
计算datetime2,使datetime2 + timedelta == datetime1。至于添加,结果具有与
tzinfo
输入日期时间相同的属性,即使输入已知,也不会进行时区调整。 -
的减法
datetime
,从一个datetime
只被定义在两个操作数是天真,或者如果两个都知道。如果一个人意识到而另一个人是天真的,那么TypeError
就会被提出来。如果两者都幼稚,或两者都知道并具有相同的
tzinfo
属性,则tzinfo
属性将被忽略,其结果是一个timedelta
对象吨使得。在这种情况下,不进行时区调整。datetime2 + t == datetime1
如果两者都知道并具有不同的
tzinfo
属性,a-b
行为,如果一个和b被首先转化为幼稚UTC日期时间第一。结果是除了实现永远不会溢出。(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) -b.utcoffset())
-
当datetime1在datetime2之前 时,datetime1被认为小于datetime2。
如果一个比较天真且另一个比较清楚,
TypeError
则在尝试进行订单比较时会引发比较。对于相等比较,天真实例永远不等于意识实例。如果两个比较都知道并具有相同的
tzinfo
属性,tzinfo
则忽略common 属性并比较基本日期时间。如果两个比较都知道并且具有不同的tzinfo
属性,则首先通过减去它们的UTC偏移(从中获得self.utcoffset()
)来调整比较。在版本3.3中更改:天真和感知
datetime
实例之间的平等比较不会引发TypeError
。注意
为了阻止比较回退到比较对象地址的默认方案,
TypeError
如果另一个比较不是对象,则日期时间比较通常会提高datetime
。但是,NotImplemented
如果另一个comparand具有timetuple()
属性, 则返回。这个钩子为其他类型的日期对象提供了实现混合类型比较的机会。如果不是,当将datetime
对象与不同类型的对象进行TypeError
比较时,除非比较为==
或,否则引发该对象!=
。后一种情况分别返回False
或True
。
datetime
对象可以用作字典键。在布尔上下文中,所有datetime
对象都被认为是真的。
实例方法:
datetime.
date
()- 返回
date
同年,月,日的对象。
datetime.
time
()time
以相同的小时,分钟,秒,微秒和折叠返回对象。tzinfo
是None
。另见方法timetz()
。在版本3.6中更改:折叠值被复制到返回的
time
对象。
datetime.
timetz
()- 返回
time
具有相同小时,分钟,秒,微秒,折叠和tzinfo属性的对象。另见方法time()
。在版本3.6中更改:折叠值被复制到返回的
time
对象。
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 )- 返回具有相同属性的日期时间,但通过指定的任何关键字参数给定新值的属性除外。请注意,
tzinfo=None
可以指定从感知日期时间创建天真日期时间而不转换日期和时间数据。版本3.6中的新功能:添加了
fold
参数。
datetime.
astimezone
(tz =无)- 返回
datetime
具有新tzinfo
属性tz的对象,调整日期和时间数据,使得结果与self相同 ,但是在tz的本地时间。如果提供,tz必须是
tzinfo
子类的实例,并且它utcoffset()
和dst()
方法不能返回None
。如果self 是天真的,则假定它代表系统时区中的时间。如果在不带参数(或with
tz=None
)的情况下调用,则假定系统使用本地时区作为目标时区。.tzinfo
转换后的datetime实例的属性将设置为具有timezone
从OS获取的区域名称和偏移量的实例。如果
self.tzinfo
是tz,self.astimezone(tz)
则等于self:不执行日期或时间数据的调整。否则结果是时区tz中的本地时间,表示与self相同的UTC时间:之后 ,将具有与之相同的日期和时间数据。astz =dt.astimezone(tz)
astz - astz.utcoffset()
dt - dt.utcoffset()
如果您只想将时区对象tz附加到日期时间dt而不调整日期和时间数据,请使用
dt.replace(tzinfo=tz)
。如果您只想从感知日期时间dt中删除时区对象而不转换日期和时间数据,请使用dt.replace(tzinfo=None)
。请注意,
tzinfo.fromutc()
可以在tzinfo
子类中重写默认方法 以影响返回的结果astimezone()
。忽略错误情况,astimezone()
行为如下:def astimezone(self, tz): if self.tzinfo is tz: return self # Convert self to UTC, and attach the new time zone object. utc = (self - self.utcoffset()).replace(tzinfo=tz) # Convert from UTC to tz's local time. return tz.fromutc(utc)
在版本3.3中更改:tz现在可以省略。
在版本3.6中更改:
astimezone()
现在可以在假定代表系统本地时间的幼稚实例上调用该方法。
datetime.
utcoffset
()- 如果
tzinfo
是None
,则返回None
,否则返回self.tzinfo.utcoffset(self)
,如果后者不返回None
或者timedelta
幅度小于一天的对象,则引发异常。版本3.7中已更改: UTC偏移量不限于整数分钟。
datetime.
dst
()- 如果
tzinfo
是None
,则返回None
,否则返回self.tzinfo.dst(self)
,如果后者不返回None
或者timedelta
幅度小于一天的对象,则引发异常 。在版本3.7中更改: DST偏移不限于整数分钟。
datetime.
tzname
()- 如果
tzinfo
是None
,则返回None
,否则返回self.tzinfo.tzname(self)
,如果后者不返回None
或者是字符串对象,则引发异常 ,
datetime.
timetuple
()- 返回
time.struct_time
如返回的time.localtime()
。d.timetuple()
相当于,从1月1 日开始的当年的日期编号。结果的标志是根据方法设置的:is 或returns ,设置为; else if 返回非零值,设置为; 其他设置为。time.struct_time((d.year, d.month, d.day, d.hour, d.minute, d.second, d.weekday(), yday, dst))
yday= d.toordinal() - date(d.year, 1, 1).toordinal() + 1
1
tm_isdst
dst()
tzinfo
None
dst()
None
tm_isdst
-1
dst()
tm_isdst
1
tm_isdst
0
datetime.
utctimetuple
()- 如果
datetime
实例d是天真的,那么d.timetuple()
除了tm_isdst
被强制为0而不管d.dst()
返回什么 外,这是相同的 。DST在UTC时间内从未生效。如果d知道,则通过减去将d标准化为UTC时间
d.utcoffset()
,并time.struct_time
返回标准化时间的a 。tm_isdst
被强制为0.请注意,OverflowError
如果d。年是MINYEAR
或者MAXYEAR
UTC调整溢出一年边界,则可能会提高。
datetime.
toordinal
()- 返回日期的格里高利序数。同样的
self.date().toordinal()
。
datetime.
timestamp
()- 返回与
datetime
实例对应的POSIX时间戳。返回值float
与返回的值类似time.time()
。datetime
假设Naive 实例表示本地时间,并且此方法依赖于平台Cmktime()
函数来执行转换。由于datetime
支持比mktime()
许多平台更广泛的值,因此这种方法可能会OverflowError
在过去或将来很长时间内提高。对于感知
datetime
实例,返回值计算如下:(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
版本3.3中的新功能。
在版本3.6中更改:该
timestamp()
方法使用该fold
属性消除重复间隔期间的时间歧义。注意
没有方法直接从
datetime
表示UTC时间的天真实例获取POSIX时间戳。如果您的应用程序使用此约定并且您的系统时区未设置为UTC,则可以通过提供tzinfo=timezone.utc
以下内容来获取POSIX时间戳 :timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
或直接计算时间戳:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
datetime.
weekday
()- 以星期为单位返回星期几,其中星期一为0,星期日为6
self.date().weekday()
。另见isoweekday()
。
datetime.
isoweekday
()- 以星期为单位返回星期几,其中星期一为1,星期日为7
self.date().isoweekday()
。另见weekday()
,isocalendar()
。
datetime.
isocalendar
()- 返回3元组(ISO年份,ISO周编号,ISO工作日)。同样的
self.date().isocalendar()
。
datetime.
isoformat
(sep =’T’,timespec =’auto’ )- 以ISO 8601格式返回表示日期和时间的字符串,YYYY-MM-DDTHH:MM:SS.ffffff,如果
microsecond
为0,则返回YYYY-MM-DDTHH:MM:SS如果
utcoffset()
不返回None
,则附加一个字符串,给出UTC偏移:YYYY-MM-DDTHH:MM:SS.ffffff + HH:MM [:SS [.ffffff]]或者,如果microsecond
是0 ,则YYYY-MM-DDTHH:MM :SS + HH:MM [:SS [.ffffff]。可选参数sep(默认值
'T'
)是一个单字符分隔符,位于结果的日期和时间部分之间。例如,>>> from datetime import tzinfo, timedelta, datetime >>> class TZ(tzinfo): ... def utcoffset(self, dt): return timedelta(minutes=-399) ... >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ') '2002-12-25 00:00:00-06:39'
可选参数timespec指定要包括的时间的其他组件的数量(默认值为
'auto'
)。它可以是以下之一:'auto'
:相同,'seconds'
如果microsecond
为0,则相同'microseconds'
。'hours'
:包括hour
两位数的HH格式。'minutes'
:包含hour
并minute
采用HH:MM格式。'seconds'
:包含hour
,minute
和second
以HH:MM:SS格式。'milliseconds'
:包括全时,但将小数秒部分截断为毫秒。HH:MM:SS.sss格式。'microseconds'
:包括HH:MM:SS.ffffff格式的全职时间。
注意
排除的时间组件被截断,而不是舍入。
ValueError
将在无效的timespec参数上引发。>>> from datetime import datetime >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP '2002-12-25T00:00' >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0) >>> dt.isoformat(timespec='microseconds') '2015-01-01T12:30:59.000000'
版本3.6中的新功能:添加了timespec参数。
datetime.
__str__
()- 对于
datetime
实例d,str(d)
相当于 。d.isoformat(' ')
datetime.
ctime
()- 例如,返回表示日期和时间的字符串。相当于本机C 函数(调用但 不调用)的平台符合C标准。
datetime(2002, 12, 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:402002'
d.ctime()
time.ctime(time.mktime(d.timetuple()))
ctime()
time.ctime()
datetime.ctime()
datetime.
strftime
(格式)- 返回表示日期和时间的字符串,由显式格式字符串控制。有关格式化指令的完整列表,请参阅 strftime()和strptime()行为。
datetime.
__format__
(格式)- 与…相同
datetime.strftime()
。这使得可以datetime
在格式化的字符串文字中和使用时为对象指定格式字符串str.format()
。有关格式化指令的完整列表,请参阅 strftime()和strptime()行为。
使用datetime对象的示例:
>>> from datetime import datetime, date, time >>> # Using datetime.combine() >>> d = date(2005, 7, 14) >>> t = time(12, 30) >>> datetime.combine(d, t) datetime.datetime(2005, 7, 14, 12, 30) >>> # Using datetime.now() or datetime.utcnow() >>> datetime.now() datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1 >>> datetime.utcnow() datetime.datetime(2007, 12, 6, 15, 29, 43, 79060) >>> # Using datetime.strptime() >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") >>> dt datetime.datetime(2006, 11, 21, 16, 30) >>> # Using datetime.timetuple() to get tuple of all attributes >>> tt = dt.timetuple() >>> for it in tt: ... print(it) ... 2006 # year 11 # month 21 # day 16 # hour 30 # minute 0 # second 1 # weekday (0 = Monday) 325 # number of days since 1st January -1 # dst - method tzinfo.dst() returned None >>> # Date in ISO format >>> ic = dt.isocalendar() >>> for it in ic: ... print(it) ... 2006 # ISO year 47 # ISO week 2 # ISO weekday >>> # Formatting datetime >>> 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.'
将datetime与tzinfo一起使用:
>>> from datetime import timedelta, datetime, tzinfo >>> class GMT1(tzinfo): ... def utcoffset(self, dt): ... return timedelta(hours=1) + self.dst(dt) ... def dst(self, dt): ... # DST starts last Sunday in March ... d = datetime(dt.year, 4, 1) # ends last Sunday in October ... self.dston = d - timedelta(days=d.weekday() + 1) ... d = datetime(dt.year, 11, 1) ... self.dstoff = d - timedelta(days=d.weekday() + 1) ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff: ... return timedelta(hours=1) ... else: ... return timedelta(0) ... def tzname(self,dt): ... return "GMT +1" ... >>> class GMT2(tzinfo): ... def utcoffset(self, dt): ... return timedelta(hours=2) + self.dst(dt) ... def dst(self, dt): ... d = datetime(dt.year, 4, 1) ... self.dston = d - timedelta(days=d.weekday() + 1) ... d = datetime(dt.year, 11, 1) ... self.dstoff = d - timedelta(days=d.weekday() + 1) ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff: ... return timedelta(hours=1) ... else: ... return timedelta(0) ... def tzname(self,dt): ... return "GMT +2" ... >>> gmt1 = GMT1() >>> # Daylight Saving Time >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1) >>> dt1.dst() datetime.timedelta(0) >>> dt1.utcoffset() datetime.timedelta(seconds=3600) >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1) >>> dt2.dst() datetime.timedelta(seconds=3600) >>> dt2.utcoffset() datetime.timedelta(seconds=7200) >>> # Convert datetime to another time zone >>> dt3 = dt2.astimezone(GMT2()) >>> dt3 # doctest: +ELLIPSIS datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>) >>> dt2 # doctest: +ELLIPSIS datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>) >>> dt2.utctimetuple() == dt3.utctimetuple() True