34、Python中时间的操作

在我们生活中,我们经常需要用到时间。无论是查看当前的时间,还是计算两个时刻之间相差多少时间。那在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。

二、Python中获取当前时间

函数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)

 运行结果为做一下解释:

  • tm_year:年份
  • tm_mon:月份
  • tm_mday:日期
  • tm_hour:小时
  • tm_min:分钟
  • tm_sec:秒
  • tm_wday:星期数(0代表星期一,往后以此类推)
  • t_yday:一年中的第几天
  • tm_isdst:是否夏令时,0代表否,1代表是

刚刚我们是为了当大家看到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

五、datetime库 

除了time库,Python中还有datetime库,库中有五个类:date类、time类、datetime类、timedelta类、tzinfo类。目前阶段我们先了解一下前面三个类的使用。

5.1 date类

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

5.2 time类

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

5.3 datetime类

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

5.4 timedelta类

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')

 

 

你可能感兴趣的:(青少年Python编程系列讲解,python,开发语言,青少年编程)