最易懂的笔记整理 时间模块应用及处理 time datetime dateutil calendar 建议收藏

# -*- coding: utf-8 -*-
# Version: Python 3.9.7
# Author: TRIX
# Date: 2021-09-10 11:11:22
# Use: 时间模块及处理 time datetime dateutil calendar

#时间
 unix时间戳 从1970.01.01 0:0:0 开始到现在一共的秒数 只能表示1970-2038的时间
1 分钟    60
1 小时    3600
1 天         86400
1 周         604800
1 月 (30.44 天)   2629743
1 年 (365.24 天)  31556736
import time
time.time() #返回当前 unix时间戳(float) time模块中的函数默认值都为time.time()
time.sleep(sec)#程序推迟执行的秒数

struct_time_obj=time.gmtime(unix_time_stamp)# unix时间戳 转 0时区struct_time对象 tm_hour+8才是当地时间 与所在时区有关 推荐使用localtime
print(struct_time_obj)
>>>time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=2, tm_min=55, tm_sec=45, tm_wday=3, tm_yday=98, tm_isdst=0)
0 tm_year #年份 其值等于实际年份减去1900
1 tm_mon #月份(从一月开始 0代表一月)-取值区间为[0,11]
2 tm_mday #一个月中的日期-取值区间为[1,31]
3 tm_hour #时-取值区间为[0,23]
4 tm_min #分-取值区间为[0,59]
5 tm_sec #秒 – 取值区间为[0,59]
6 tm_wday #星期 – 取值区间为[0,6] 其中0代表星期一 1代表星期二 以此类推
7 tm_yday #从每年的1月1日开始的天数 – 取值区间为[0,365] 其中0代表1月1日 1代表1月2日 以此类推
8 tm_isdst #夏令时标识符 实行夏令时的时候 tm_isdst为1 不实行夏令时的时候 tm_isdst为0 系统自动判断tm_isdst为-1

%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 #当前时区的名称

#时间戳 本地struct_time对象 时间字符串 datetime对象 互相转换
local_struct_time_tuple=time.localtime(unix_time_stamp)# unix时间戳 转 本地struct_time对象
'Sat Mar 28 22:24:24 2016'=time.strftime('%a %b %d %H:%M:%S %Y', time.localtime(1530000078.0))# unix时间戳 转 时间字符串
'Tue Feb 17 10:00:18 2021'=time.ctime(unix_time_stamp)#unix时间戳 转 时间字符串
datetime_obj=datetime.datetime.fromtimestamp(unix_time_stamp)# unix时间戳转 datetime对象
unix_time_stamp=time.mktime(local_struct_time_tuple)#本地struct_time对象 转 unix时间戳
'2021-09-09 20:59:51'=time.strftime('%Y-%m-%d %H:%M:%S',struct_time_obj)#本地struct_time对象 转 时间字符串
'Tue Feb 17 09:42:58 2019'=time.asctime(time.gmtime(unix_time_stamp) or time.localtime(unix_time_stamp))#本地struct_time对象 转 时间字符串
datetime_obj=datetime.datetime.fromtimestamp(mktime(local_struct_time_tuple))#本地struct_time对象 转 datetime对象
1530000078.0=time.mktime(time.strptime('2018-06-26 16:01:18', '%Y-%m-%d %H:%M:%S'))# 时间字符串 转 unix时间戳
struct_time_obj=time.strptime('2021-09-09 20:59:51','%Y-%m-%d %H:%M:%S')# 时间字符串 转 本地struct_time对象
datetime_obj=datetime.datetime.strptime('2018-06-26 16:01:18', '%Y-%m-%d %H:%M:%S')# 时间字符串 转 datetime对象 打印datetime对象会显示为时间字符串
unix_time_stamp=time.mktime(datetime_obj.timetuple())# datetime对象 转 unix时间戳
struct_time_obj=datetime_obj.timetuple()#datetime对象 转 本地struct_time对象
'2018-06-26 16:01:18'=str(datetime_obj)# datetime对象 转 时间字符串
'2020-11-19 00:21:04.982400'=str(datetime.datetime(
    year=1900, month=1, day=1) + datetime.timedelta(days=44152.014641))# excel的float日期 转 时间字符串
datetime_obj=datetime.datetime(
    year=1900, month=1, day=1) + datetime.timedelta(days=44152.014641)# excel的float日期 转 datetime对象

#常用时间处理
unix_time_stamp=time.mktime(datetime_obj.timetuple())# datetime对象 转 unix时间戳
today_obj=datetime.date.today()#今天 2021-09-09
yesterday=today_obj-datetime.timedelta(days=1)#昨天
last_month=today_obj.month-1 if today_obj.month-1 else 12#上个月 如果是1-1=0 则为12月 0==False
today_str=today_obj.strftime("%Y-%m-%d")# datetime对象 转 时间字符串
today_obj=datetime.datetime.strptime(today_str, "%Y-%m-%d")## 时间字符串 转 datetime对象
today_obj + datetime.timedelta(hours=8)#补时差

#datetime
import datetime
datetime.date.today()#date对象 打印返回时间字符串 2021-09-09
datetime.date.fromtimestamp(unix_time_stamp)#时间戳转字符串日期
date_obj=datetime.date(year,month,day)#date对象 和 datetime对象类似
date_obj.year
date_obj.month
date_obj.day
date_obj.replace(newyear,newmonth,newday)#返回替换后的date_obj 本身不替换
date_obj.timetuple()#返回struct_time对象
date_obj.isocalendar()#返回IsoCalendarDate对象 包含year,month,day
date_obj.isoformat()#返回'%Y-%m-%d的字符串

time_obj=datetime.time(hour,minute,second)#time对象 和 datetime对象类似
time_obj.hour
time_obj.minute
time_obj.second
time_obj.replace(newhour,newminute,newsecond)
time_obj.isoformat()#返回格式如'HH:MM:SS’的字符串

datetime.datetime.today()#datetime对象 2021-09-09 20:59:51
'2021-09-09 20:46:13.923185'=datetime.datetime.now(time_zone)#返回一个表示当前本地时间的datetime对象 如果提供了参数time_zone 则返回时区时间 如 'UTC' 时区简称百度
datetime.datetime.utcnow()#返回一个当前utc时间的datetime对象 格林威治时间
datetime.datetime.fromtimestamp(unix_time_stamp,time_zone)#根据时间戳创建一个datetime对象 time_zone指定时区信息
datetime.datetime.utcfromtimestamp(unix_time_stamp)#根据时间戳创建一个datetime对象 utc
datetime.datetime.combine(date,time)#根据date和time 创建一个datetime对象
datetime_obj=datetime.datetime.strptime('2018-06-26 16:01:18', '%Y-%m-%d %H:%M:%S')# 时间字符串 转 datetime对象
datetime_obj=datetime.datetime(year,month,day,hour,minute,second)
datetime_obj.year month day hour minute second microsecond timezone
datetime_obj.date()#获取date对象
datetime_obj.time()#获取time对象
datetime_obj.replace(year, month, day, hour, minute, second, microsecond, timezone)
datetime_obj.timetuple()
datetime_obj.utctimetuple()
datetime_obj.isocalendar()
datetime_obj.isoformat(sep)
datetime_obj.ctime()#datetime对象 转 时间字符串 等同下面的一行
datetime_obj.strftime('%a %b %d %H:%M:%S %Y')#datetime对象 转 时间字符串
datetime.timedelta(days=float,seconds=float,weeks=float,minutes=float,hours=float,microseconds=float)#时间计算 不能计算年月 只能和 datetime对象计算

#dateutil 用于datetime时间处理
from dateutil.parser import parse
datetime_obj=parse('2018.10.21 5:5:5')#任意时间字符串 转 datetime对象
#年份放在前面时 只能按年-月-日的顺序
#分隔符为逗号时 只有月-日时 要把月放在前面 有年份时 年份要放在后面
datetime_obj=parse("2018/10/21")
from dateutil import rrule
rrule.rrule(freq=rrule.UNIT, dtstart=datetime_obj, interval=int or tuple, wkst=rrule.WEEK,count=int or tuple, until=datetime_obj, bysetpos=index,bymonth=int or tuple, bymonthday=int or tuple, byyearday=int or tuple, byeaster=int or tuple,byweekno=int or tuple, byweekday=rrule.WEEK or tuple, byhour=int or tuple, byminute=int or tuple, bysecond=int or tuple)#从指定日期范围 返回所有符合要求的datetime对象 组成的rrule对象
freq#单位 可以是 rrule.YEARLY, MONTHLY, WEEKLY,DAILY, HOURLY, MINUTELY, SECONDLY 即年月日周时分秒
dtstart,until#是开始和结束 datetime对象
wkst#每周的第一天是星期几 默认rrule.MO 星期一
interval#间隔 默认值为1
count#只计算count个 符合要求的日期
bymonth#月 1-12
bymonthday#月的第几天 1-31 -1--31
byyearday#年的第几天 1-366 -366--1
byweekno#年的第几周 1-53 -53--1
byweekday#周的第几天 rrule.MO,TU,WE,TH,FR,SA,SU
byhour#第几小时 0-23
byminute#第几分 0-59
bysecond#第几秒 0-59
bysetpos#日期格式里的第几天 取值范围 1-366 或 -366--1
byeaster#复活节 0为复活节当天 其他数字为从复活节当日偏移的日期

list(rrule.rrule(rrule.DAILY,byweekday=(rrule.SA,rrule.SU),dtstart=parse('2018-11-1'),until=parse('2018-11-5')))#只要周六和周日
>>>[datetime.datetime(2018, 11, 3, 0, 0),
datetime.datetime(2018, 11, 4, 0, 0)]
rrule.rrule(freq,dtstart=parse('date'),until=datetime.date.today()).count()#计算某个日期到今天相差freq数
rrule.rrule(rrule.YEARLY,interval=2,bymonth=1,byweekday=rrule.SU,byhour=(8,9), byminute=30)#每两年的一月,周日的8点30分和9点30分
rrule.rrule(rrule.MONTHLY,byweekday=(rrule.MO,rrule.TU,rrule.WE,rrule.TH,rrule.FR,rrule.SA,rrule.SU),bysetpos=-1)#每月的最后一天工作日
rrule.rrule(rrule.MONTHLY,count=3,byweekday=(rrule.TU,rrule.WE,rrule.TH),bysetpos=3)#在未来的3个月 每个月里的所有是星期二三四的日期 日期里的第3天

#calendar 日历
import calendar
calendar.calendar(year,w=2,l=1,c=6)#返回一个月历 c是月份间距  w是日期间距 l是行距 不填会设置为默认间距
calendar.isleap(year)#是闰年返回 True 否则为 False
calendar.leapdays(y1,y2)#返回在Y1 Y2两年之间的闰年总数
calendar.month(year,month,w=2,l=1)#返回一个多行字符串格式的year年month日历 w是日期间距 l是行距 不填会设置为默认间距
calendar.timegm(struct_time_obj)
#struct_time对象 转 unix时间戳
calendar.monthrange(year,month)#返回(int,day_int)#第一个是该月的第一天是星期几 0-6~MO-SU 第二个是该月有多少天 28-31
days_list=calendar.mdays#本年每个月的天数组成的列表

你可能感兴趣的:(最易懂的笔记整理 时间模块应用及处理 time datetime dateutil calendar 建议收藏)