python里和时间有关的库常用的大概有:time,datetime,calender,schedual等一些库,模块可以通过dir(模块名)来查看所有的方法和属性,通过help(模块名)进行学习
time
今天开始更新pyhon的进阶内容,隔了大半年才开始更新,因为一直没有个好的机会来整理python。
python里和时间有关的库常用的大概有三个:time,datetime,calender。个人觉得time比较用的多。
time库的东西也不是很多,在终端下查看到的所有方法如下,加粗部分是需要掌握的方法。
_STRUCT_TM_ITEMS, __doc__, __loader__, __name__, __package__, __spec__, altzone, asctime, clock, ctime, daylight, get_clock_info, gmtime, localtime, mktime, monotonic, monotonic_ns, perf_counter, perf_counter_ns, process_time, process_time_ns, sleep, strftime, strptime, struct_time, thread_time, thread_time_ns, time, time_ns, timezone, tzname
clock()
该方法是返回从开启程序到调用到clock()的cpu时钟,当我们用的时候会发现它返回的是一串数字,如图所示。
但从这一个图不能理解什么叫从调用程序到执行clock(),我们来对比多组clock()方法,从这几个对比值可以发现,他是一秒一秒增加的。原来这个的意思是从我打开python时开始记录时间,到执行clock()一共用的时间。
和clock()很像的还有time(),这个是从1970年一月一日开始计时,我也经过计算确实是49年
ctime()
将时间戳转化成日期,具体作用在多地方都能碰见,例如CTF题目有使用时间戳加密的,可以使用该函数解密,平时用时间戳加密的js我们爬取内容时也需要转化时间
1 | import time |
localtime()
localtime()返回的是一个时间元组。上面记录着年,月,日等等不过这个只需要了解,下面有更好用的方法。
sleep()
这个方法相当重要,他代表程序休眠后面的单位是秒,例如:time.sleep(2) 代表程序休眠两秒,在无ip代理爬虫中用的相当频繁。
strftime
一般都是用这个来打印当前时间,这个使用起来比localtime()方便许多
1 | def two(): |
这是两种使用方法,经检测执行一百万次two用时较短。
%Y->年
%m->月
%d->日
%H->小时
%M->分钟
%S->秒
注意大小写
calender
calendar库和time库都是用来表示时间的,他们两个都是python内置库。calendar的中文意思是日历,所以我就把它当作日历来使用了。
拿到一个库就应该先看库里面的方法有哪些
‘Calendar’, ‘EPOCH’, ‘FRIDAY’, ‘February’, ‘HTMLCalendar’, ‘IllegalMonthError’, ‘IllegalWeekdayError’, ‘January’, ‘LocaleHTMLCalendar’, ‘LocaleTextCalendar’, ‘MONDAY’, ‘SATURDAY’, ‘SUNDAY’, ‘THURSDAY’, ‘TUESDAY’, ‘TextCalendar’, ‘WEDNESDAY’, ‘_EPOCH_ORD’, ‘__all__’, ‘__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘_colwidth’, ‘_locale’, ‘_localized_day’, ‘_localized_month’, ‘_spacing’, ‘c’, ‘calendar’, ‘datetime’, ‘day_abbr’, ‘day_name’, ‘different_locale’, ‘error’, ‘firstweekday’, ‘format’, ‘formatstring’, ‘isleap’, ‘leapdays’, ‘main’, ‘mdays’, ‘month’, ‘month_abbr’, ‘month_name’, ‘monthcalendar’, ‘monthlen’, ‘monthrange’, ‘nextmonth’, ‘prcal’, ‘prevmonth’, ‘prmonth’, ‘prweek’, ‘repeat’, ‘setfirstweekday’, ‘sys’, ‘timegm’, ‘week’, ‘weekday’, ‘weekheader’
这么一大堆东西,看着都有点蒙,读都读不通更别说记住了。这个库常用的就几个方法,只要记住三个就已经够用了,记多了反而会把知识混淆。
calendar()
1 | import calendar |
导入模块打印出2019年的日历
感觉这个东西特别神奇,两行代码就能输出这么一大堆有规律的东西,多亏了先辈们写好的库。
month()
1 | import calendar |
导入模块,打印出2019年八月的日历,和calendar()大同小异
isleap()
1 | import calendar |
判断年份是否为闰年
以前做过那种使用程序来判断是否为闰年的题目,python来写简直是在作弊!
其他内容完全没有必要再去深究,用到时在来研究也不迟,我们只要知道calendar库有这些功能就行了
leapdays()检测指定年限内润年的数量,返回布尔值
monthrange() 获取指定月份的信息,返回本月第一天星期数和本月天数
weekday (2020.5.16)根据指定的年月日计算星期几
timegm() 将时间元组转化为时间戳
schedule
schedule是用来定时执行某项计划的一个模块
[‘CancelJob’, ‘IntervalError’, ‘Job’, ‘ScheduleError’, ‘ScheduleValueError’, ‘Scheduler’, ‘__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__path__’, ‘__spec__’, ‘cancel_job’, ‘clear’, ‘collections’, ‘datetime’, ‘default_scheduler’, ‘every’, ‘functools’, ‘idle_seconds’, ‘jobs’, ‘logger’, ‘logging’, ‘next_run’, ‘random’, ‘re’, ‘run_all’, ‘run_pending’, ‘time’]
1 | import schedule |
上面的程序是定时每隔一分钟执行一次函数,(开始不执行需要一分钟后),这个函数不需要传参,如果遇到需要传参的函数需要按照下面的程序编写
1 | import schedule |
-
每天11点
schedule.every().day.at(“11:00”).do(fuc)
-
每1到2分钟
schedule.every(1).to(2).munutes.do(fuc)
-
周一
schedule.every().monday.do(fuc,)
-
每天
schedule.every().day.do(fuc)
-
每周一11点
schedule.every().monday.at(“11:00”).do(fuc)
datetime
datetime也是一个输出日期和时间的模块,和time的功能差不多。
fromtimestamp()
将时间戳转换成时间
1 | from datetime import datetime as dt |
可以单个输出
1 | from datetime import datetime as dt |
- .year
- .month
- .day
- .hour
- .minute
- .second
时间元组
使用datetime模块将时间元组补充完整
1 | from datetime import datetime as dt |