python datetime模块杂记

开发过程中经常会遇到时间、日期方面的处理,今天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'
posted @ 2020-01-21 14:22  瑕瑜  阅读(104)  评论(0编辑  收藏  举报