时间的表现形式
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