python 中的时间模块

时间的表现形式

1. struct_time 类型

它是一个具有命名元组接口的对象:可以通过索引和属性名访问值。存在以下值:

  • index—attribute—values
  • 0—tm_year—年份
  • 1—tm_mon—月份 range[1,12]
  • 2—tm_mday—天数 range[1,31]
  • 3—tm_hour—小时 range[0,23]
  • 4—tm_min—分钟 range[0,59]
  • 5—tm_sec—秒数 range[0,61]
  • 6—tm_wday—星期 range[0,6],0 是星期日
  • 7—tm_yday—一年中的一天 range[1,366]
  • 8—tm_isdst—tm_isdst 可以在夏令时生效时设置为 1,而在夏令时不生效时设置为 0。值 -1 表示这是未知的。
  • N/A—tm_zone—时区名称的缩写
  • N/A—tm_gmtoff—协调世界时以东偏移,以秒为单位.

例如,time.struct_time(tm_year=2019, tm_mon=3, tm_mday=20, tm_hour=23, tm_min=11, tm_sec=33, tm_wday=2, tm_yday=79, tm_isdst=0)

2. 格式化时间类型

例如,’Wed Mar 20 23:12:26 2019’

3. 时间戳类型

时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒 (北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒) 起至现在的总毫秒数。
例如,time.time()得到的 float 类型的秒数。

4 时间格式化指令

一、time 模块

time 模块的主要功能分三个方面:

  • 获取系统时间
  • 时间格式化
  • 计时

1.1 获取系统时间

  • time.time() 返回当前时间的时间戳

  • time.gmtime() 获取 UTC 对应的 struct_time 对象,元祖的表现形式

  • time.localtime() 获取当前本地时间的 struct_time 对象,元祖的表现形式

  • time.ctime() 获取当前时间对应的易读字符串形式(符合美国人的阅读习惯)

# 上述后三个方法括号中可以加时间戳 timestmap,即获取时间戳对应的时间。

1.2 时间格式化

  • time.mktime(struct_time) 把元祖形式的时间转化为时间戳

    struct_time—结构化的时间或者完整的 9 位元组元素。

  • time.strftime(format, struct_time) 以指定的通用格式输出时间

  • time.strptime(string_time, format) 与 time.strftime()相反,生成元祖式时间

    format 对应 (string_time) 的时间格式

1.3 计时

  • time.sleep(5) 休息 5 秒再执行

1.4 总结

1.4.1 时间相互转化

二、datetime 模块

datetime 模块是 time 模块的进一步封装,对用户更加友好,在时间各属性的获取上回更加方便一些,当然,在效率上会略微低一些。datetime 模块的功能主要都几种在 datetime、date、time、timedelta、tzinfo 五个类中。这五个类功能如下表所示:

类名 功能
date 提供处理日期(年月日)接口
time 提供处理时间(时分秒)接口
datetime 同时处理日期和时间
timedelta 提供时间运算接口
tzinfo 提供处理时区信息接口

2.1 date 类

使用 date 类的时候,一般会先传入参数:date(year,month,day)

2.1.1 元祖变日期:

from datetime import date
date(2020,2,3)
//print 输出如下:
2020-02-03  type<datetime.date>
…………………………………………………………………………………………………………………………………………………………………………
date(2020,2,3).isoformat()
//print 输出如下:
2020-02-03   type<str>

以上用法不多。

2.1.2 时间戳变日期

date.fromtimestamp(timestamp)

from datetime import date
import time
date.fromtimestamp(time.time())
//print 输出如下:
2020-03-23    type<class 'datetime.date'>

2.1.3 元祖变周数

  • date(year,month,day).isocalendar()

    以元组 (iso year, iso_week, iso_weekday) 的形式返回日期

    date(2019,2,5).isocalendar()
    //print 输出如下:
    (2019,6,2)   type<tuple>
    // 意思为 2019 年第 6 周周二
  • date(year,month,day).isoweekday()

    返回传入日期是星期几

    date(2019,2,5).isoweekday()
    //print 输出如下:
    2   type<int>
    // 意思为传入的日期是周二

2.1.4 元祖变格式化日期

date(year,month,day).strftime(format)

按照给定的 format 进行格式化输出

date(2019,2,5).strftime("%Y-%m-%d")
//print 输出如下:
2019-02-05   type<str>

2.1.5 元祖变结构化日期

date(year,month,day).timetuple()

返回日期对应的 time.struct_time 对象,6 维元祖

date(2019,2,5).timetuple()
//print 输出如下:
time.struct_time(tm_year=2019, tm_mon=2, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=36, tm_isdst=-1)

2.1.6 元祖变英文日期

date(year,month,day).ctime()

date(2019,2,3).ctime()
//print 输出如下:
un Feb  3 00:00:00 2019

2.1.7 替换日期

date(year,month,day).replace(year1,month1,day1)

替换给定日期,但不改变原日期

2.1.8 获取系统日期

date.today()

date.today()
//print 输出如下:
2020-03-23   type<class 'datetime.date'>

2.1.9 其他

date(year,month,day).year

date(year,month,day).month

date(year,month,day).day

2.2 time 类

使用 time 类的时候,一般会先传入参数:time(hour,minute,second[,microsecond,tzoninfo])

2.2.1 元祖变格式化时间

time(hour,minute,second).strftime(format)

按照给定的 format 进行格式化输出

from datetime import time
time(12,30,20).strftime('%H:%M:%S')
//print 输出如下:
12:30:20    type<str>

2.2.2 时区名字

time(hour,minute,second,microsecond,tzoninfo).tzname()

2.2.3 时区偏移

time(hour,minute,second,microsecond,tzoninfo).utcoffset()

2.3 datetime 类

2.3.1 获取系统日期和时间

  • datetime.now()

    返回当前系统时间

  • datetime.now().date()

    返回当前系统时间的日期部分

  • datetime.now().time()

    返回当前系统时间的时间部分

datetime.now()
//print 输出如下:
2020-03-23 21:47:59.372159    type<class 'datetime.datetime'>

2.3.2 时间戳变日期和时间

datetime.fromtimestamp(timestamp)

返回时间戳 timestamp 对应的时间,type<class ‘datetime.datetime’>

2.3.3 元祖变英文时间

datetime(year, month, day[, hour,……]).ctime()

datetime(2019,2,13,12).ctime()
//print 输出如下:
Sun Feb  13 12:00:00 2019   type<str>

2.3.4 字符串变格式化时间

datetime.strptime('xx',format)

由时间字符串 xx 格式转化为日期格式

datetime.strptime('2019-4-3','%Y-%m-%d')
//print 输出如下:
2019-04-03 00:00:00  <class 'datetime.datetime'>

2.3.5 格式化输出

datetime(year, month, day[, hour,……]).strftime(format)

按照给定的 format 进行格式化输出

datetime.now().strftime('%b-%d-%Y %H:%M:%S')
//print 输出如下:
Mar-23-2020 22:09:44   type<class 'str'>

2.4 timedelta 类

1.4.1 日期和时间计算

from datetime import timedelta
from datetime import datetime
tomorrow=datetime.now()+timedelta(days=1)
//print 输出如下:
2020-03-24 22:16:18.440283  <class 'datetime.datetime'>

2.4.2 计算相隔天数 / 秒数

a=datetime(2016, 10, 20)-datetime(2015, 11, 2)
a.days
a.total_seconds()
//print 输出如下:
353
30499200.0
type(a)<class 'datetime.timedelta'>

欢迎各位看官及技术大佬前来交流指导呀,可以邮件至 jqiange@yeah.net