一,时间处理的基本介绍
1,主要内容
时间处理包括时间类型和对time,datetime,calender模块的使用
- 时间类型:字符串时间,时间戳
- time模块:时间戳,字符串时间,时间类型转换,时间计算
- datetime模块
- calender模块
2,应用场景
- 根据时间筛选数据,例如:1个月数据,1年数据,某天数据;
- 与时间相关指标统计:日活,月活,留存等;
3,常见操作
- 获取当前时间与时间戳;
- 时间转换,例如:时间字符串转成时间对象;
- 时间差计算,例如:最近三天,最近7天,两个时间差;
4,时间转化关系
时间戳 ---------------->struct_time------------------->时间字符串
二,time模块
1,准备工作
- 下载模块
- 导入
import time
2,时间戳(timestamp)
相关方法
方法 | 说明 |
time.time() | 返回当前时间戳,类型:浮点数 |
time.time_ns() | 返回纳秒,类型:整数 |
示例
import time
print(time.time())
print(time.time_ns())
'''
Output:输出取决于当前时间
1716811446.9699967
1716811446969996700
'''
3,struct_time
- 形式:
time.struct_time(
tm_year=2022, tm_mon=1, tm_mday=1,
tm_hour=1, tm_min=26, tm_sec=57,
tm_wday=4, tm_yday=21, tm_isdst=0)
说明:
tm_year | 年 |
tm_mon | 月 |
tm_mday | 日 |
tm_hour | 时 |
tm_min | 分 |
tm_sec | 秒 |
tm_wday | 星期(0-6,周日为0) |
tm_yday | 今年第几天 |
tm_isdst | 是否夏令时 |
- 相关方法
方法 | 说明 |
time.localtime([secs]) | 将时间戳转成struct_time类型,如果secs为空,获取当前时间 |
time.gmtime([secs]) | 将时间戳转换为UTC时区(0时区)的struct_time,如果secs为空, 获取当前时间 |
示例:
st_time1 = time.localtime()
st_time2 = time.gmtime()
print(st_time1)
print(st_time2)
'''
time.struct_time(tm_year=2024, tm_mon=5, tm_mday=27, tm_hour=21, tm_min=35, tm_sec=28, tm_wday=0, tm_yday=148, tm_isdst=0)
time.struct_time(tm_year=2024, tm_mon=5, tm_mday=27, tm_hour=13, tm_min=35, tm_sec=28, tm_wday=0, tm_yday=148, tm_isdst=0)
'''
4,转化
- 时间戳和struct_time转化
方法:
方法 | 说明 |
time.localtime(ts) | 将时间戳转成struct_time |
time.mktime(tuple) | 将struct_time转成时间戳 |
示例:
import time
ts1 = time.time()
print(ts1)
st = time.localtime(ts1)
print(st)
ts2 = time.mktime(st)
print(ts2)
'''
1716817095.7837
time.struct_time(tm_year=2024, tm_mon=5, tm_mday=27, tm_hour=21, tm_min=38, tm_sec=15, tm_wday=0, tm_yday=148, tm_isdst=0)
1716817095.0
'''
- 字符串时间和struct_time的转化
方法:
方法 | 说明 |
time.strptime(string, format) | 将字符串按照对应的格式转成struct_time对象 |
time.strftime(format[, tuple]) | 将strcut_time对象按照指定格式转成字符串时间 |
time.asctime([tuple]) | 将strct_time对象转成可读的时间字符串,例如:'Fri Jan 21 18:06:51 2022' |
time.ctime(seconds) | 将时间戳转成可读的时间字符串,例如:'Fri Jan 21 18:06:51 2022' |
format说明:
符号 | 说明 |
%Y | 年份[xxxx] |
%y | 年份[xx] |
%m | 月份[01,12] |
%d | 日期[01,31] |
%H | 小时[00,23] |
%I | 小时[00,12] |
%S | 秒数[00,59] |
%p | AM或PM |
%x | 日期(月/日/不带世纪的年份) |
%X | 时间(时:分:秒) |
%A | 本地完整星期名称 |
%a | 本地简化星期名称 |
%B | 本地完整的月份名称 |
%b | 本地简化的月份名称 |
%w | 星期(0-6),0:周日,1:周1,以此类推 |
三,datetime模块
1,常用方法
方法 | 说明 |
datetime.date | 表示日期,常用的属性有:year, month和day |
datetime.time | 表示时间,常用属性有:hour, minute, second, microsecond |
datetime.datetime | 表示日期时间 |
datetime.timedelta | 表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单 位)可达到微秒 |
datetime.timezone | 时区相关类 |
2,示例
from datetime import date, time, datetime
#创建date对象
date = date(2024, 5, 27)
#创建time对象
time = time(21, 0,1)
#获取当前的时间
dt_now = datetime.now()
print(dt_now)
#获取当前时间戳
print(dt_now.timestamp())
#获取当前时间的date
print(dt_now.date())
#获取当前的time
print(dt_now.time())
#计算时间差
dt_delta = dt_now - datetime(2024, 1,1)
print(dt_delta)
#转成时间字符串
s = dt_now.strftime("%Y-%m-%d %H:%M:%S")
print(s)
#将时间字符串转datetime对象
print(datetime.strptime(s, "%Y-%m-%d %H:%M:%S"))
输出结果:
'''
2024-05-27 22:05:20.319027
1716818720.319027
2024-05-27
22:05:20.319027
147 days, 22:05:20.319027
2024-05-27 22:05:20
2024-05-27 22:05:20
'''
四,calendar模块
1,介绍
calendar是与日历相关的模块,主要用来:
- 获取某一年日历,第一行为年份,第二行月份,第三行为星期
- 判断是否是闰年
- 获取指定年月的日历
- 计算指定年月日是星期几
2,示例
import calendar
print(calendar.calendar(2024))
print(calendar.isleap(2024))
print(calendar.month(2024,5))
print(calendar.weekday(2024,5,27))
结果: