python 时间处理模块 time datetime calendar

395 阅读7分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

1. time

1.1 时间的三种表示方法

  1. 时间戳(timestamp): 从1997-01-01 00:00:00开始按秒计算的偏移量(float)
  2. 格式化的时间字符串
  3. 元组方式(struct_time): 共9个元素. 下面列出元组中的元素
    索引属性
    0tm_year(年) 
    1tm_mon(月)1 - 12
    2tm_mday(日)1 - 31
    3tm_hour(时)0 - 23
    4tm_min(分)0 - 59
    5tm_sec(秒)0 - 61(闰年秒占两秒)
    6tm_wday(星期几)0 - 6(0为周日)
    7tm_yday(一年的第几天)1 - 366
    8tm_isdst(是否是夏令时)

1.2 time模块方法

方法 返回值类型 说明 的格式展示

  • .localtime([seconds]) struct_time 将时间戳转换为当前时区的struct_time(无参数则表示当前时间)
  • .gmtime([seconds]) struct_time 将时间戳转换为UTC时区的struct_time(无参数则表示当前时间)
  • .time() float 当前时间的时间戳
  • .mktime(tuple) float 将struct_time转换为时间戳
  • .sleep(seconds) None 线程推迟指定的时间运行(单位为秒)
  • .clock() float UNIX: 返回"进程时间". Windows: 第一次调用返回进程运行的实际时间, 之后调用返回的是自第一次运行后到现在的运行时间.
  • .asctime([tuple]) str 传入表示时间的元组, 以'Sat Dec  2 15:07:10 2017'的格式返回(无参数则默认传入.localtime())
  • .ctime([seconds]) str 同.asctime()不过传入的是时间戳(默认传入.time())
  • .strftime(format[, tuple]) str 把一个代表时间的元组(未指定则传入.localtime())转化为格式化的时间字符串. 如: time.strftime("%Y-%m-%d %X") 输出 '2017-12-02 15:14:31'
  • .strptime(string, format) struct_time .strftime()的逆操作.
    • 如: time.strptime('2017-12-02 15:14:31', '%Y-%m-%d %X') 输出 time.struct_time(tm_year=2017, tm_mon=12, tm_mday=2, tm_hour=15, tm_min=14, tm_sec=31, tm_wday=5, tm_yday=336, tm_isdst=-1)

1.3 format规则

格式含义
%a本地简化星期名称
%A本地完整星期名称
%b本地简化月份名称
%B本地完整月份名称
%c本地相应的日期和时间表示
%d一个月中的第几天(01 - 31)
%H一天中的第几个小时(24小时制,00 - 23)
%I第几个小时(12小时制,01 - 12)
%j一年中的第几天(001 - 366)
%m月份(01 - 12)
%M分钟数(00 - 59)
%p本地am或者pm的相应符1
%S秒(01 - 61)2
%U一年中的星期数。 (00 - 53星期天是一个星期的开始。 )第一个星期天之前的所有天数都放在第0周。3
%w一个星期中的第几天(0 - 6,0是星期天)3
%W和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x本地相应日期
%X本地相应时间
%y去掉世纪的年份(00 - 99)
%Y完整的年份
%Z时区的名字(如果不存在为空字符)
%%‘%’字符

2. datetime

2.1 date

方法 返回值类型 说明 的格式展示

  • date(year, month, day) date
  • 类方法/属性
    • .max date datetime.date(9999, 12, 31), str()或print()为'9999-12-31'
    • .min date '0001-01-01'
    • .resolution timedelta datetime.timedelta(1), str: '1 day, 0:00:00'. date对象表示日期的最小单位(天)
    • .today() date 当前本地日期
    • .fromtimestamp(timestamp) date 返回给定时间戳对应的日期
    • .fromordinal(ordinal) date 将Gregorian日历时间转换为date对象
  • 实例方法/属性
    • .year int
    • .month int
    • .day int
    • .replace(year, month, day) date 生成一个新的日期对象, 用参数指定的年, 月, 日代替原有对象中的属性(原有对象仍保持不变)
    • .timetuple() struct_time 返回日期对应的time.struct_time对象
    • .toordinal() int 返回日期对应的Gregorian Calendar日期
    • .weekday() int(0-6) 返回weekday, 如果是星期一, 返回0; 如果是星期二, 返回1, 以此类推
    • .isoweekday() int(1-7) 返回weekday, 如果是星期一, 返回1; 如果是星期二, 返回2, 以此类推
    • .isocalendar() tuple 返回格式如(year,month,day)的元组
    • .isoformat() str 返回格式如'YYYY-MM-DD’的字符串
    • .strftime(format) str 返回格式化的字符串, 参考time模块格式化规则
  • 运算符重载
    • date ± timedelta date 日期加上或减去一个时间间隔(timedelta参考下文)
    • date1 - date2 timedelta 计算两个日期的时间间隔
    • date1 比较运算符 date2 bool 两个日期进行比较

2.2 time

  • time(hour[, minute[, second[, microsecond[, tzinfo]]]]) time tzinfo表示时区信息
  • 类方法/属性
    • .max time datetime.time(23, 59, 59, 999999), str: '23:59:59.999999'
    • .min time datetime.time(0, 0, 0, 0), str: '00:00:00'
    • .resolution timedelta datetime.timedelta(0, 0, 1) str: '0:00:00.000001'. 时间的最小单位(微秒)
  • 实例方法/属性
    • .hour, .minute, .second, ... int 时, 分, 秒, 微秒
    • .tzinfo 时区信息 |
    • .replace([ hour[, ...]]) time 创建一个新的时间对象, 用参数指定的时, 分, 秒, 微秒代替原有对象中的属性(原有对象仍保持不变)
    • .isoformat() str 返回型如"HH:MM:SS"格式的字符串表示
    • .strftime(format) str 返回自定义格式化字符串
  • 运算符重载 同date类

2.3 datetime

  • datetime(...) datetime date与time类的所有构造器参数
  • 类方法/属性
    • .max datetime datetime所能表示的最大值
    • .min datetime datetime所能表示的最小值
    • .resolution timedelta datetime最小单位
    • .today() datetime 返回一个表示当前本地时间的datetime对象
    • .now([tz]) datetime 获取tz参数所指时区(默认本地)的本地时间
    • .utcnow() datetime 返回一个当前utc时间的datetime对象
    • .fromtimestamp(timestamp[, tz]) datetime 根据时间戮创建一个datetime对象,参数tz指定时区信息
    • .utcfromtimestamp(timestamp) datetime 根据时间戮创建一个datetime对象
    • .combine(date, time) datetime 根据date和time, 创建一个datetime对象
    • .strptime(date_string, format) datetime 将格式字符串转换为datetime对象
  • 实例方法/属性
    • date与time类的所有属性
    • .date() date 获取date对象
    • .time() time 获取time对象
    • .replace([ hour[, ...]]) datetime 创建一个新的时间对象(原有对象仍保持不变)
    • .timetuple() struct_time 类型转换
    • .utctimetuple() struct_time 类型转换
    • .toordinal() int 返回日期对应的Gregorian Calendar日期
    • .weekday() int(0-6) 0表示周一
    • .isocalendar() tuple 返回格式如(year,month,day)的元组
    • .isoformat() str 返回自定义格式化字符串
    • .ctime() str 以'Sat Dec  2 15:07:10 2017'的格式返回时间
    • .strftime(format) str 返回自定义格式化字符串
  • 运算符重载 同date类

3. calendar

  • .calendar(theyear, w=2, l=1, c=6, m=3) str 返回指定年份的年历, w: 每个日期的宽度, l: 每一行的纵向宽度, c: 月与月之间的宽度, m: 一排显示几个月
  • .firstweekday( ) - 返回当前每周起始日期的设置. 默认情况下, 首次载入caendar模块时返回0, 即星期一
  • .isleap(year) - 是闰年返回True, 否则为false
  • .leapdays(y1,y2) - 返回在Y1, Y2两年之间的闰年总数
  • .month(year,month,w=2,l=1) - 返回year年month月日历
  • .monthcalendar(year,month) list 返回一个整数的单层嵌套列表. 每个子列表装载代表一个星期的整数. Year年month月外的日期都设为0;范围内的日子都由该月第几日表示, 从1开始
  • .monthrange(year,month) tuple 返回两个整数. 第一天是该月的星期几的日期码(0-6),第二个是该月的天数
  • .prcal(year,w=2,l=1,c=6) None 相当于print(calendar.calendar(year,w,l,c))
  • .prmonth(year,month,w=2,l=1) None 相当于 print(calendar.calendar(year, w, l, c))
  • .setfirstweekday(weekday) None 设置每周的起始日期码(0-6)
  • .timegm(tupletime) float 和time.gmtime相反: 接受一个时间元组形式, 返回该时刻的时间辍
  • .weekday(year,month,day) int 返回给定日期对应星期几的日期码(0-6)

Footnotes

  1. “%p”只有与“%I”配合使用才有效果

  2. 文档中强调确实是0 - 61,而不是59,闰年秒占两

  3. 当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算 2