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时钟,当我们用的时候会发现它返回的是一串数字,如图所示。

人生苦短,我用python「time库」

但从这一个图不能理解什么叫从调用程序到执行clock(),我们来对比多组clock()方法,从这几个对比值可以发现,他是一秒一秒增加的。原来这个的意思是从我打开python时开始记录时间,到执行clock()一共用的时间。

人生苦短,我用python「time库」

和clock()很像的还有time(),这个是从1970年一月一日开始计时,我也经过计算确实是49年

人生苦短,我用python「time库」

ctime()

将时间戳转化成日期,具体作用在多地方都能碰见,例如CTF题目有使用时间戳加密的,可以使用该函数解密,平时用时间戳加密的js我们爬取内容时也需要转化时间

1
2
import time
time.ctime(时间戳)

localtime()

localtime()返回的是一个时间元组。上面记录着年,月,日等等不过这个只需要了解,下面有更好用的方法。

人生苦短,我用python「time库」

sleep()

这个方法相当重要,他代表程序休眠后面的单位是秒,例如:time.sleep(2) 代表程序休眠两秒,在无ip代理爬虫中用的相当频繁。

strftime

一般都是用这个来打印当前时间,这个使用起来比localtime()方便许多

人生苦短,我用python「time库」

1
2
3
4
5
def two():
now = time.strftime("%Y.%m.%d.%H.%M.%S").split(".")
print("{0}年{1}月{2}日 {3}:{4}:{5}".format(*now))
def one():
print("{0}年{1}月{2}日 {3}:{4}:{5}".format(*(time.strftime("%Y.%m.%d.%H.%M.%S").split("."))))

这是两种使用方法,经检测执行一百万次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
2
import calendar
print(calendar.calendar(2019))

导入模块打印出2019年的日历

人生苦短,我用python 「calendar库」

感觉这个东西特别神奇,两行代码就能输出这么一大堆有规律的东西,多亏了先辈们写好的库。

month()

1
2
import calendar
print(calendar.month(2019,8))

导入模块,打印出2019年八月的日历,和calendar()大同小异

人生苦短,我用python 「calendar库」

isleap()

1
2
3
import calendar
print(calendar.isleap(2019))
print(calendar.isleap(2020))

判断年份是否为闰年

人生苦短,我用python 「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
2
3
4
5
6
7
8
9
10
11
import schedule

def fuc():
print("working")

schedule.every(1).minutes.do(fuc)
while True:
schedule.run_pending()#作用是循环监听,如果不加则上面的定时无效

>>>输出
每隔一分钟后运行函数

上面的程序是定时每隔一分钟执行一次函数,(开始不执行需要一分钟后),这个函数不需要传参,如果遇到需要传参的函数需要按照下面的程序编写

1
2
3
4
5
6
7
8
9
10
11
import schedule

def fuc(what):
print(what)

schedule.every(1).minutes.do(fuc,"working")
while True:
schedule.run_pending()

>>>输出
每隔一分钟后运行函数
  • 每天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
2
3
4
5
6
7
from datetime import datetime as dt
import time
date = dt.fromtimestamp(time.time()) #time.time()是当前时间戳
print(date)

>>>
2020-06-05 15:34:41.836618

可以单个输出

1
2
3
4
5
6
7
from datetime import datetime as dt
import time
date = dt.fromtimestamp(time.time())
print(date.year,date.month,date.day)

>>>
2020 6 5
  1. .year
  2. .month
  3. .day
  4. .hour
  5. .minute
  6. .second

时间元组

使用datetime模块将时间元组补充完整

1
2
3
4
5
6
from datetime import datetime as dt
time = dt(2020,6,5).timetuple()
print(time)

>>>
time.struct_time(tm_year=2020, tm_mon=6, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=157, tm_isdst=-1)