在我们生活中,我们经常需要用到时间。无论是查看当前的时间,还是计算两个时刻之间相差多少时间。那在Python中如何查看时间呢?这节课我们专题讲一下Python中时间的操作。Python的内置标准库time库包含了各种与时间相关的函数,我们一起学习一下吧。
时间戳(time stamp)是时间在计算机中记录的方式。它的定义是:将格林威治时间(0时区)的1970年1月1日 00:00:00 GMT定义为0,当前时间与格林威治时间的1970年1月1日0点相差的总秒数叫做时间戳。
时间戳在计算机中是一个浮点数。在1970年1月1日 00:00:00之后的时间为正数,之前的时间为负数。
如1970/1/1 01:00:59.5 GMT在计算机中时间戳记录为3659.5。
函数time.time()可以获得当前的时间戳。我们看一下具体的使用:
import time
now = time.time()
print(now)
我运行时,结果为1671333380.2526162。这就是当前时间与1970/1/1 00:00:00之间的总秒数。这个时间对于我们人类来说根本没办法阅读,因此我们需要使用time.localtime()函数将它变成人类能够看懂的格式化时间。我们看一下具体的使用方法:
import time
now = time.time()
t_now = time.localtime(now)
print(t_now)
以上代码运行的结果如下:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=18, tm_hour=11, tm_min=20, tm_sec=57, tm_wday=6, tm_yday=352, tm_isdst=0)
运行结果为做一下解释:
刚刚我们是为了当大家看到time.localtime()函数转换的过程,其实在实际使用中,如果该函数不给任何参数即代表当前时间,程序我们可以写成这样:
import time
t_now = time.localtime()
print(t_now)
除了time.localtime()函数,我们还可以使用time.ctime()函数获取当前的时间:
import time
t_now = time.ctime()
print(t_now)
程序运行的结果如下所示:
Sun Dec 18 11:28:52 2022
这个时间的显示结果非常符合西方人的思维:星期 月 日 时间 年。但是对于中国人来说,这个显示方法还是不理想。如果我们想要获得自己熟悉的时间显示方式,需要用到格式化时间。
time.strftime()函数可以将时间按照格式化字符串要求的格式输出时间。我们先要了解一下各种格式化字符串的含义:
格式化字符串 | 含义 |
---|---|
%d | 表示日期数,01~31之间 |
%H | 表示24小时制小时数,00~23之间 |
%I | 表示12小时制小时数,01~12之间 |
%j | 表示一天中的第几天,001~366之间 |
%m | 表示月份数,01~12之间 |
%M | 表示分钟数,00~59之间 |
%p | 表示上午或下午,AM、PM |
%S | 表示秒数,00~61(偶尔有闰秒) |
%w | 表示星期数,0~6之间,0表示星期日 |
%W | 表示一年中的第几周,00~53之间 |
%x | 本地化的适当日期表示 |
%X | 本地化的适当时间表示 |
%y | 两位数的年份数,00~99之间 |
%Y | 四位数的年份数 |
红色的部分是相对较为常用的,我们需要记忆一下。下面我们看看如何使用格式化字符串得到我们想要的日期格式:
import time
now = time.localtime()
now_t = time.strftime('%Y-%m-%d %H:%M:%S', now)
print(now_t)
程序运行的结果如下所示:
2022-12-18 11:41:30
我们可以按照自己的需求修改代码,让时间的输出满足我们想要的格式:
import time
now = time.localtime()
now_t = time.strftime('%Y年%m月%d日 %H:%M:%S', now)
print(now_t)
代码运行结果如下所示:
2022年12月18日 11:45:28
在time库中除了时间计算外,还有一个time.sleep()函数,它的作用是让程序在运行过程中“暂停”。在计算机中,程序运行一次称为一个线程,sleep()函数的作用是将线程挂起,即让程序在指定时间内暂停运行,函数接收一个参数,表示暂停的秒数。
我们看一下函数具体的使用:
import time
for i in range(5):
now = time.localtime()
now_t = time.strftime('%Y-%m-%d %H:%M:%S', now)
print(now_t)
time.sleep(3)
程序运行时,我们会发现循环不会立即执行完,而是每过3秒执行一次,程序运行结果如下:
2022-12-18 12:16:42
2022-12-18 12:16:45
2022-12-18 12:16:48
2022-12-18 12:16:51
2022-12-18 12:16:54
除了time库,Python中还有datetime库,库中有五个类:date类、time类、datetime类、timedelta类、tzinfo类。目前阶段我们先了解一下前面三个类的使用。
date类构造函数包含三个参数:year、month、day。实例化date类时需要传入三个参数。返回值的格式为Y-m-d。
我们看具体的使用方法:
import datetime
d = datetime.date(2022, 12, 18)
print(d)
#2022-12-18
print(d.year, d.month, d.day)
#2022 12 18
date类还有三个方法:
1、fromtimestamp(t),该方法传入一个参数时间戳,返回对应的日期:
import datetime
print(datetime.date.fromtimestamp(60*60*24*2))
#1970-01-03
2、today(),该方法无需传入参数,返回今天的日期:
import datetime
print(datetime.date.today())
#2022-12-18
3、fromordinal(n),该方法传入一个参数天数,返回n-1天后的日期:
import datetime
print(datetime.date.today())
#2022-12-18
print(datetime.date.fromordinal(2))
#2022-12-19
4、weekday(),该方法返回日期对应的星期几。用0到6表示星期一到星期日
import datetime
d = datetime.date.today()
w = datetime.date.weekday(d)
print(w)
# 6
time类构造函数包含六个参数:hour,minute,second,microsecond,tzinfo,fold。构造函数如下所示:
def __init__(self, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, fold=0)
我们需要了解前面4个参数的含义:小时、分钟、秒、微秒。后面两个参数可以先不需要了解。我们只要传入相应的参数,就可以实例化一个时间:
import datetime
t = datetime.time(23, 8, 9, 23)
print(t)
# 23:08:09.000023
print(t.hour, t.minute, t.second, t.microsecond)
# 23 8 9 23
datetime类是date类和time类的合体,包含前两个类的全部参数。分别为year,month,day,hour,minute,second,microsoft,tzinfo,fold。
我们看看如何使用:
import datetime
time = datetime.datetime(2022, 11, 11, 12, 23, 49)
print(time)
# 2022-11-11 12:23:49
我们了解一下datetime类中的函数:
1、now()函数:返回当前的日期和时间
import datetime
now = datetime.datetime.now()
print(now)
# 2022-12-18 14:03:08.497887
2、date()方法和time()方法:分别返回datetime的日期部分和时间部分
import datetime
now = datetime.datetime.now()
print(now.date)
# 2022-12-18
print(now.time)
# 14:03:35.234127
timedelta类代表时间差的计量单位,它的构造函数如下:
__init__(self, days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0)
我们使用时传入相应的参数就可以了。
import datetime
now = datetime.datetime.now()
a = datetime.timedelta(3,0,0,0,20,5)#days,seconds,microseconds,milliseconds,minutes,hours,weeks
print(now + a) # 当前时间加上3天5小时20分钟
还有tzinfo类是与时区相关的类,这里不展开细讲了。
1、选择题
假设当前的时间为:2022年11月11日19时30分28秒。则执行下列程序输出的结果是:
import time
a = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(a)
A. 2022-11-11 19:30:28
B. 2022年11月11日19时30分28秒
C. 2022-11-11/11/11 19:30:28
D. 1668166228.0
2、编程题
假设今天的日期是2022年12月2日,小明知道自己还有142天过生日。请编写一个程序,计算出小明的生日是哪一天。
1、B
2、A
3、参考代码:
# -*- coding=utf-8
from wordcloud import WordCloud
import jieba
text = '冬天不像夏天,没入深夜,路上已静悄悄的,再加上这里本就人烟稀少,更是静的可怕。一个人静静的走着,就这样静静的走着,任凭影子拉的长长的。你呢?怎么不打个电话? 是不是发信了我没看见?掏出手机,空空的,没有。继续走吧。怎么这么静呢?没有鸟叫,也没有小虫的唧唧声。哎,不可能有嘛,小傻瓜,这是冬天啊。冬天?怎么也没人呢?小猫小狗也没有,偶尔有辆车疾驰而过,赶趟似的。手机依然没动静。不看了,每次看过,都是沮丧。一辆车疾驰而过又停下,耳边传来一声大喝。叫我吗?转过身,看一眼,又迅速转过来,心跳开始加快。不会是坏人吧 !脚步不由得加快,若遇到坏人,怎么办。你呢?在哪里呢?你说要保护我的。四十分钟的路,有一半了吧。还好,没事。继续走吧。'
text = ' '.join(jieba.lcut(text))
wc = WordCloud(font_path=r'C:\Windows\Fonts\MSYHL.TTC', width=800,
height=600, background_color='white').generate(text)
wc.to_file(r'D:\wordcloud.png')