开发过程中经常会遇到时间、日期方面的处理,今天mark下python datetime模块用法。
一、python 日期时间格式化符号
| 格式化符号 |
含义 |
| %y |
两位数的年份表示(00-99) |
| %Y |
四位数的年份表示(000-9999) |
| %m |
月份(01-12) |
| %d |
月内中的一天(0-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 |
当前时区的名称 |
| %% |
%号本身 |
二、datetime模块内容
datetime模块所含类如下表:
| 类 |
功能 |
| date |
日期对象,常用的属性有year, month, day |
| time |
时间对象 |
| datetime |
日期时间对象,常用的属性有hour, minute, second, microsecond |
| datetime_CAPI |
日期时间对象C语言接口 |
| timedelta |
时间间隔,即两个时间点之间的长度 |
| tzinfo |
时区信息对象 |
1、date类:
>>> import datetime
>>> a = datetime.date(2020, 1, 15)
>>> a
datetime.date(2020, 1, 15)
>>> a.__getattribute__('year')
2020
>>> a.__getattribute__('month')
1
>>> a.__getattribute__('day')
15
| 方法 |
功能 |
| eq(…) |
等于(x==y) |
| ge(…) |
大于等于(x>=y) |
| gt(…) |
大于(x>y) |
| le(…) |
小于等于(x<=y) |
| lt(…) |
小于(x) |
| ne(…) |
不等于(x!=y) |
>>> a = datetime.date(2020, 1, 15)
>>> b = datetime.date(2020, 1, 18)
>>> b.__sub__(a)
datetime.timedelta(3)
- 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串(isoformat):
>>> a = datetime.date(2020, 1, 15)
>>> a.isoformat()
'2020-01-15'
- 返回符合ISO标准的指定日期所在的星期数(周一为1,周日为7)(isoweekday):
>>> a = datetime.date(2020, 1, 15)
>>> a.isoweekday()
3
- 返回指定日期所在的星期数(周一为0,周日为6)(weekday):
>>> a = datetime.date(2020, 1, 15)
>>> a.weekday()
2
- 返回一个替换指定日期字段的新date对象(replace):
>>> a = datetime.date(2020, 1, 15)
>>> b = a.replace(year=2019)
>>> a
datetime.date(2020, 1, 15)
>>> b
datetime.date(2019, 1, 15)
- 根据给定的时间戮,返回一个date对象(fromtimestamp):
>>> import time
>>> time.time()
1579575703.503332
>>> datetime.date.fromtimestamp(time.time())
datetime.date(2020, 1, 21)
>>> datetime.date.today()
datetime.date(2020, 1, 21)
2、time类:
| 元素 |
功能 |
| hour |
小时 |
| minute |
分钟 |
| second |
秒 |
| microsecond |
毫秒 |
| tzinfo |
时区信息 |
>>> a = datetime.time(11, 23, 56, 123)
>>> a.__format__('%H:%M:%S')
'11:23:56'
- 符合ISO标准的格式化字符串(isoformat):
>>> a = datetime.time(11, 23, 56, 123)
>>> a.isoformat()
'11:23:56.000123'
3、datetime类:
datetime类包含date类与time类元素。
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 51, 34, 304754)
>>> a.date()
datetime.date(2020, 1, 21)
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 52, 48, 361725)
>>> a.time()
datetime.time(11, 52, 48, 361725)
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 54, 42, 22225)
>>> a.utctimetuple()
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=21, tm_hour=11, tm_min=54, tm_sec=42, tm_wday=1, tm_yday=21, tm_isdst=0)
- 将一个date对象和一个time对象合并生成一个datetime对象(combine):
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 56, 35, 460041)
>>> datetime.datetime.combine(a.date(), a.time())
datetime.datetime(2020, 1, 21, 11, 56, 35, 460041)
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 56, 35, 460041)
4、strptime()和strftime()的应用
- strptime()函数将字符串格式转化为日期格式:
>>> a = '2020-01-21 13:31:08'
>>> datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
datetime.datetime(2020, 1, 21, 13, 31, 8)
- strftime()函数将日期格式格式转化为字符串:
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 13, 31, 8, 657874)
>>> datetime.datetime.strftime(a, '%Y-%m-%d %H:%M:%S')
'2020-01-21 13:31:08'
>>> a = '2020-01-21 13:31:08'
>>> b = datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
>>> b
datetime.datetime(2020, 1, 21, 13, 31, 8)
>>> b = b + datetime.timedelta(hours=8)
>>> b
datetime.datetime(2020, 1, 21, 21, 31, 8)
>>> a = datetime.datetime.strftime(b, '%Y-%m-%d %H:%M:%S')
>>> a
'2020-01-21 21:31:08'