开发过程中经常会遇到时间、日期方面的处理,今天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类:
- 获取对象元素方法(getattribute):
>>> 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) |
- 计算两个日期相差天数(sub):
>>> 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)
- 返回当前日期(today):
>>> datetime.date.today()
datetime.date(2020, 1, 21)
2、time类:
- time类的构成:
元素 | 功能 |
---|---|
hour | 小时 |
minute | 分钟 |
second | 秒 |
microsecond | 毫秒 |
tzinfo | 时区信息 |
- 时间格式化为字符串(format):
>>> 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类元素。
- 返回datetime对象的日期部分(date):
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 51, 34, 304754)
>>> a.date()
datetime.date(2020, 1, 21)
- 返回datetime对象的时间部分(time):
>>> a = datetime.datetime.now()
>>> a
datetime.datetime(2020, 1, 21, 11, 52, 48, 361725)
>>> a.time()
datetime.time(11, 52, 48, 361725)
- 返回UTC时间元组(utctimetuple):
>>> 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)
- 获取当前时间(now):
>>> 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'
来源:CSDN
作者:瑕瑜
链接:https://blog.csdn.net/weixin_43919745/article/details/104147220