Python datetime 模块
datetime 模块常量:
datetime.MINYEAR
:date 和 datetime 对象中允许的最小年份。MINYEAR 为 1。
datetime.MAXYEAR
:date 和 datetime 对象中允许的最大年份数。MAXYEAR 为 9999。
子类关系:
object
timedelta
tzinfo
timezone
time
date
datetime
time 时间
一个独立于任何特定的日子,假设每天有 24 \* 60 \* 60
秒(这里没有“闰秒”的概念)。属性:hour
、minute
、second
、microsecond
和 tzinfo
。
class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
所有参数都是可选的。tzinfo 可以是 None 或 tzinfo
子类的实例。其余的参数可以是以下范围内的整数:
- 0 <= hour < 24
- 0 <= minute < 60
- 0 <= second < 60
- 0 <= microsecond < 1000000.
类属性
>>> import datetime
>>> datetime.time.min # 最早的 time
datetime.time(0, 0)
>>> datetime.time.max # 最晚的 time
datetime.time(23, 59, 59, 999999)
>>> datetime.time.resolution # 不相等的 time 对象之间的最小可能差 1 微秒
datetime.timedelta(0, 0, 1)
>>> print(datetime.time.resolution)
0:00:00.000001
实例属性(只读)
>>> t = datetime.time(1, 2, 3)
>>> t.hour
1
>>> t.minute
2
>>> t.second
3
>>> t.microsecond
0
>>> t.tzinfo # None
>>>
实例方法
>>> t = datetime.time(1, 2, 3)
>>> t.isoformat() # 返回格式 HH:MM:SS.mmmmmm 表示的字符串,如果 microsecond 为 0,则以 HH:MM:SS 的格式。
'01:02:03'
>>> t.__str__() # 等同于 t.isoformat()
'01:02:03'
>>> t.strftime('%H') # 返回一个表示 time 的指定格式字符串,
'01'
>>> t.__format__('%H') # 与 time.strftime() 相同
'01'
# time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
>>> t.replace(2) # 返回具有相同值的 time
datetime.time(2, 2, 3)
>>> t
datetime.time(1, 2, 3)
>>> t.replace()
datetime.time(1, 2, 3)
date 日期
class datetime.date(year, month, day)
所有参数都是必需的。参数可以是以下范围内的整数:
- MINYEAR <= year <= MAXYEAR
- 1 <= month <= 12
- 1 <= day <= 给定年下给定月份中的天数
类方法
>>> datetime.date.today() # 返回当前的本地日期。这相当于date.fromtimestamp(time.time())。
datetime.date(2019, 1, 26)
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2019, 1, 26)
>>> datetime.date.today().toordinal()
737085
>>> datetime.date.fromordinal(1) # 返回对应于格雷高尔顺序的日期,其中第1年的1月1有序号1。
datetime.date(1, 1, 1)
>>> datetime.date.fromordinal(737085) # 对于任何日期d,date.fromordinal(d.toordinal()) == d。
datetime.date(2019, 1, 26)
类属性
>>> datetime.date.min # 可表示的最早日期
datetime.date(1, 1, 1)
>>> datetime.date.max # 可表示最晚的日期
datetime.date(9999, 12, 31)
>>> datetime.date.resolution # 不相等的日期对象之间的最小可能差异
datetime.timedelta(1)
实例属性(只读)
d = datetime.date.today()
>>> d.year
2019
>>> d.month
1
>>> d.day
26
实例方法
>>> d.replace(day=27) # 返回一个日期
datetime.date(2019, 1, 27)
>>> d.timetuple() # 返回一个time.struct_time,类似time.localtime()的返回值。
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=26, tm_isdst=-1)
>>> yday = d.toordinal() - datetime.date(d.year, 1, 1).toordinal() + 1
>>> time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1)) # 等同于 d.timetuple()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=26, tm_isdst=-1)
>>> d.toordinal() # 返回该日期的预测格里历序号
737085
>>> datetime.date.fromordinal(d.toordinal()) == d
True
>>> d.weekday() # 将星期几作为整数返回,其中星期一为0,星期日为6。
5
>>> d.isoweekday() # 将星期几作为整数返回,其中星期一为1,星期日为7。
6
>>> d.isocalendar() # 返回3元组(ISO年,ISO周编号,ISO工作日)。
(2019, 4, 6)
# ISO年包括52或53个整周,其中一周从星期一开始并在星期日结束。ISO年的第一周是一年的第一个包含星期四的(公历)日历周。这称为周数1,该周四的ISO年与其公历年相同。
# 例如,2004年从星期四开始,因此ISO 2004年的第一周从2003年12月29日星期一开始,2004年1月4日星期日结束
# 因此 date(2003, 12, 29).isocalendar() == (2004, 1, 1) 以及 date(2004, 1, 4).isocalendar() == (2004, 1, 7)。
>>> d.isoformat() # 以ISO 8601格式返回表示日期的字符串'YYYY-MM-DD'
'2019-01-26'
>>> d.__str__() # 等同于d.isoformat()。
'2019-01-26'
>>> d.ctime() # 返回表示日期的字符串
'Sat Jan 26 00:00:00 2019'
>>> time.ctime(time.mktime(d.timetuple())) # 等效于 d.ctime()
'Sat Jan 26 00:00:00 2019'
>>> d.strftime('%Y年%m月%d日') # 返回一个表示日期的字符串
'2019年01月26日'
>>> d.__format__('%Y年%m月%d日') # 与 date.strftime() 相同。
'2019年01月26日'
timedeltas 时间差
timedelta 对象表示两个 date、time 或 datetime 实例之间相差的时间,分辨率达到微秒。
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有参数都是可选的且默认为0。参数可以是整数或浮点数,也可以是正数或负数。
只有days(天),seconds(秒)和microseconds(微秒)存储在内部。参数被转换为这些单位:
- 1毫秒转换为1000微秒。
- 1分钟转换为60秒。
- 1小时转换为3600秒。
- 1周被转换为7天。
然后对天,秒和微秒进行归一化,以便表示是唯一的
- 0 <= microseconds < 1000000
- 0 <= seconds < 3600*24(一天中的秒数)
- -999999999 <= days <= 999999999
类属性
>>> from datetime import timedelta
>>> timedelta.min # 最小的 timedelta 对象
datetime.timedelta(-999999999)
>>> timedelta.max # 最大的 timedelta 对象,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
datetime.timedelta(999999999, 86399, 999999)
>>> timedelta.resolution # 不相等的 timedelta 对象之间的最小可能差值 timedelta(microseconds=1)
datetime.timedelta(0, 0, 1)
实例属性(只读)
>>> t = timedelta.max
>>> t.days
999999999
>>> t.seconds
86399
>>> t.microseconds
999999
支持的操作
>>> t2 = timedelta(1)
>>> t2
datetime.timedelta(1)
>>> t3 = timedelta(0,1)
>>> t3
datetime.timedelta(0, 1)
>>> t2 + t3 # t2 和 t3 的和
datetime.timedelta(1, 1)
>>> t2 - t3 # t2 和 t3 的差
datetime.timedelta(0, 86399)
>>> t2 * 2 # 乘以一个整数
datetime.timedelta(2)
>>> t2 * 1.1 # 乘以一个浮点数,结果使用 round-half-to-even 舍入到 timedelta.resolution 最近的倍数
datetime.timedelta(1, 8640)
>>> t2 / t3 # t2 除以 t3。返回一个 float 对象。
86400.0
>>> t2 / 2 # 除以一个浮点数或整数
datetime.timedelta(0, 43200)
>>> t2 // 2 # 计算商,余数被丢弃
datetime.timedelta(0, 43200)
>>> t2 // t3 # 计算商,返回一个整数
86400
>>> t2 % t3 # 计算余数
datetime.timedelta(0)
>>> divmod(t3, t2) # 计算商和余数:q = t1 // t2 且 r = t1 % t2。q一个是整数,r是一个timedelta对象。
(0, datetime.timedelta(0, 1))
>>> -t2 # 等效于 timedelta(-t1.days, -t1.seconds, -t1.microseconds),和 t1* -1。
datetime.timedelta(-1)
>>> abs(t2) # 当 t.days >= 0 时等效于 +t,当 t.days < 0 时等效于 -t
datetime.timedelta(1)
>>> str(t2)
'1 day, 0:00:00'
>>> repr(t2)
'datetime.timedelta(1)'
实例方法
>>> t2.total_seconds() # 返回持续时间中包含的总秒数。等同于 t2 / timedelta(seconds=1)。
86400.0
日期算术运算
>>> today = datetime.date.today()
>>> one_day = datetime.timedelta(days=1)
>>> yesterday = today - one_day # 日期减一天
>>> tomorrow = today + one_day # 日期加一天
>>> yesterday
datetime.date(2019, 1, 26)
>>> tomorrow
datetime.date(2019, 1, 28)
>>> tomorrow - yesterday # 日期实例之间相减会产生时间差
datetime.timedelta(2)
>>> yesterday - tomorrow
datetime.timedelta(-2)
比较数值
日期值和时间值都可以使用标准比较运算符进行比较,以确定哪个值更早或更晚。
>>> t1 = datetime.time(12, 55, 0)
>>> t1
datetime.time(12, 55)
>>> t2 = datetime.time(13, 5, 0)
>>> t2
datetime.time(13, 5)
>>> t1 < t2
True
>>> d1 = datetime.date.today()
>>> d1
datetime.date(2019, 1, 27)
>>> d2 = datetime.date.today() + datetime.timedelta(days=1)
>>> d2
datetime.date(2019, 1, 28)
>>> d1 > d2
False
datetime 日期与时间
datetime 对象是一个包含 date 对象和 time 对象所有信息的单个对象。
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
年,月和日的参数是必需的。tzinfo 可以是 None 或 tzinfo 子类的实例。其余的参数可以是以下范围内的整数:
- MINYEAR <= year <= MAXYEAR
- 1 <= month <= 12
- 1 <= day <= 给定年下给定月份中的天数
- 0 <= hour < 24
- 0 <= minute < 60
- 0 <= second < 60
- 0 <= microsecond < 1000000
类方法
>>> from datetime import datetime
>>> datetime.today() # 返回当前本地日期时间,相当于 datetime.fromtimestamp(time.time())
datetime.datetime(2019, 1, 27, 13, 58, 55, 518472)
>>> datetime.now() # 返回当前的本地日期和时间。如果可选参数 时区tz 为 None 或未指定,则这类似于 today()
datetime.datetime(2019, 1, 27, 13, 59, 6, 547804)
>>> datetime.utcnow() # 返回当前 UTC 日期和时间
datetime.datetime(2019, 1, 27, 5, 59, 18, 215222)
>>> datetime.fromtimestamp(time.time()) # 返回与时间戳对应的本地日期和时间
datetime.datetime(2019, 1, 27, 13, 59, 35, 268036)
>>> datetime.utcfromtimestamp(time.time()) # 返回与时间戳对应的 UTC datetime
datetime.datetime(2019, 1, 27, 5, 59, 59, 106960)
>>> datetime.now().toordinal() # 实例方法,获得对应于普通公历的序数
737086
>>> datetime.fromordinal(737086) # 返回对应于普通公历的序数的 datetime
datetime.datetime(2019, 1, 27, 0, 0)
>>> d = datetime.now()
>>> datetime.combine(d.date(), d.timetz()) # 根据 date time 对象返回一个 datetime 对象
datetime.datetime(2019, 1, 27, 14, 9, 37, 908094) # 等同于 d
>>> from datetime import date
>>> from datetime import time
>>> datetime.combine(date(2017,1,1), time(1))
datetime.datetime(2017, 1, 1, 1, 0)
>>> datetime.strptime('20180101', '%Y%m%d')
datetime.datetime(2018, 1, 1, 0, 0)
类属性
>>> datetime.min # 可表示的最早 datetime
datetime.datetime(1, 1, 1, 0, 0) # 可表示的最晚 datetime
>>> datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
>>> datetime.resolution # 不相等的 datetime 对象之间的最小可能差值
datetime.timedelta(0, 0, 1)
实例属性(只读)
>>> d = datetime.now()
>>> d.year
2019
>>> d.month
1
>>> d.day
27
>>> d.hour
14
>>> d.minute
22
>>> d.second
21
>>> d.microsecond
17905
>>> d.tzinfo
>>>
实例方法
>>> d = datetime.now()
>>> d.date() # 返回具有相同年、月和日的date对象。
datetime.date(2019, 1, 27)
>>> d.time() # 返回具有相同小时、分钟、秒和微秒的 time 对象
datetime.time(14, 22, 21, 17905)
>>> d.timetz() # 返回具有相同小时、分钟、秒、微秒和 tzinfo 属性的 time 对象。
datetime.time(14, 22, 21, 17905)
>>> d.replace(2020) # [year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]
datetime.datetime(2020, 1, 27, 14, 22, 21, 17905)
>>> d.astimezone(tz=None) # 返回带有新 tzinfo 属性 tz(默认本地地区) 的 datetime 对象
datetime.datetime(2019, 1, 27, 14, 22, 21, 17905, tzinfo=datetime.timezone(datetime.timedelta(0, 28800), '中国标准时间'))
>>> dd = d.astimezone()
>>> dd.tzname()
'中国标准时间'
>>> d.timetuple() # 返回一个 time.struct_time,类似 time.localtime() 的返回值。
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=27, tm_hour=14, tm_min=22, tm_sec=21, tm_wday=6, tm_yday=27, tm_isdst=-1)
>>> d.utctimetuple()
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=27, tm_hour=14, tm_min=22, tm_sec=21, tm_wday=6, tm_yday=27, tm_isdst=0)
>>> d.toordinal() # 返回日期的公历序数。
737086
>>> d.timestamp() # 返回对应于 datetime 实例的时间戳
1548570141.017905
>>> d.weekday() # 将星期几作为整数返回,其中星期一为0,星期日为6。等同于 self.date().weekday()。
6
>>> d.isoweekday() # 将星期几作为整数返回,其中星期一为1,星期日为7。等同于 self.date().isoweekday()。
7
>>> d.isocalendar() # 返回 3 元组(ISO年,ISO周编号,ISO工作日)。等同于 self.date().isocalendar()。
(2019, 4, 7)
>>> d.isoformat(sep='T') # 返回以 ISO 8601 格式 YYYY-MM-DDTHH:MM:SS.mmmmmm 表示日期和时间的字符串,如果 microsecond 为 0,则以 YYYY-MM-DDTHH:MM:SS 的格式。
'2019-01-27T14:22:21.017905'
>>> d.__str__() # 等效于 d.isoformat(' ')
'2019-01-27 14:22:21.017905'
>>> d.ctime() # 返回一个表示日期和时间的字符串,等效于 time.ctime(time.mktime(d.timetuple()))。
'Sun Jan 27 14:22:21 2019'
>>> d.strftime('%Y-%m-%d') # 返回一个表示日期和时间的字符串,由显式的格式字符串控制。
'2019-01-27'
>>> d.__format__('%Y-%m-%d') 与 d.strftime() 相同。
'2019-01-27'
格式代码
%y
两位数的年份表示(00-99)%Y
四位数的年份表示(000-9999)%m
月份(01-12)%d
月内中的一天(01-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
当前时区的名称%%
%号本身
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:Python datetime 模块
文章字数:3.4k
本文作者:Bin
发布时间:2019-01-17, 16:43:21
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2019/01/17/Python/Python%20datetime%20%E6%A8%A1%E5%9D%97/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。