【python】标准库(第六讲)

简介: 在日常生活中,“时间”这个属于是比较笼统和含糊的。在物理学中,“时间”是一个非常明确的概念。在 Python 中,“时间”可以通过相关模块实现。

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

image.gif

目录

1. calendar

1.1 calendar(year,w=2,l=1,c=6)

1.2 isleap(year)

1.3 leapdays(y1,y2)

1.4 month(year,month,w=2,l=1)

1.5 monthcalendar(year,month)

1.6 monthrange(year,month)

1.7 weekday(year,month,day)

2. time

2.1 time()

2.2 localtime()

2.3 gmtime()

2.4 asctime()

2.5 ctime()

2.6 mktime()

2.7 strftime()

2.8 strptime()

3. datetime

3.1 date 类

3.2 time 类

3.3 timedelta 类

👑👑👑结束语👑👑👑


“一寸光阴一寸金,寸金难买寸光阴”,时间是宝贵的。

在日常生活中,“时间”这个属于是比较笼统和含糊的。在物理学中,“时间”是一个非常明确的概念。在 Python 中,“时间”可以通过相关模块实现。

1. calendar

>>> import calendar
>>> cal = calendar.month(2015, 1)
>>> print cal
    January 2015
Mo Tu We Th Fr Sa Su
        1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

image.gif

轻而易举得到了 2015 年 1 月的日历,并且排列的还那么整齐。这就是 calendar 模块。大家可以用 dir() 去查看这个模块下的所有内容。为了让大家阅读方便,将常用的整理如下(一切都是为了热衷于CSDN的兄弟姐妹们啊):

1.1 calendar(year,w=2,l=1,c=6)

返回 year 年年历,3 个月一行,间隔距离为 c。 每日宽度间隔为 w 字符。每行长度为 21* W+18+2* C。l 是每星期行数。

>>> year = calendar.calendar(2015)
>>> print year
                        2015
    January                 February                 March
Mo Tu We Th Fr Sa Su             Mo Tu We Th Fr Sa Su             Mo Tu We Th Fr Sa Su
      1 2 3 4                     1                 1
 5 6 7 8 9 10 11       2 3 4 5 6 7 8         2 3 4 5 6 7 8
12 13 14 15 16 17 18     9 10 11 12 13 14 15     9 10 11 12 13 14 15
19 20 21 22 23 24 25      16 17 18 19 20 21 22     16 17 18 19 20 21 22
26 27 28 29 30 31        23 24 25 26 27 28        23 24 25 26 27 28 29
                                30 31
    April                 May                 June
Mo Tu We Th Fr Sa Su           Mo Tu We Th Fr Sa Su         Mo Tu We Th Fr Sa Su
    1 2 3 4 5                 1 2 3   1 2 3 4 5 6 7
6 7 8 9 10 11 12      4 5 6 7 8 9 10        8 9 10 11 12 13 14
13 14 15 16 17 18 19    11 12 13 14 15 16 17    15 16 17 18 19 20 21
20 21 22 23 24 25 26     18 19 20 21 22 23 24     22 23 24 25 26 27 28
27 28 29 30         25 26 27 28 29 30 31     29 30
    July                  August              September
Mo Tu We Th Fr Sa Su            Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su
   1 2 3 4 5                    1 2     1 2 3 4 5 6
6 7 8 9 10 11 12        3 4 5 6 7 8 9        7 8 9 10 11 12 13
13 14 15 16 17 18 19     10 11 12 13 14 15 16     14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31         24 25 26 27 28 29 30        28 29 30
             31
    October                 November                 December
Mo Tu We Th Fr Sa Su           Mo Tu We Th Fr Sa Su         Mo Tu We Th Fr Sa Su
    1 2 3 4                     1     1 2 3 4 5 6
5 6 7 8 9 10 11        2 3 4 5 6 7 8         7 8 9 10 11 12 13
12 13 14 15 16 17 18     9 10 11 12 13 14 15     14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22     21 22 23 24 25 26 27
26 27 28 29 30 31        23 24 25 26 27 28 29     28 29 30 31
               30

image.gif

1.2 isleap(year)

判断是否为闰年,是则返回 true,否则 false.

>>> calendar.isleap(2000)
True
>>> calendar.isleap(2015)
False

image.gif

怎么判断一年是闰年,常常见诸于一些编程语言的练习题,现在用一个方法搞定。

1.3 leapdays(y1,y2)

返回在 Y1,Y2 两年之间的闰年总数,包括 y1,但不包括 y2,这有点如同序列的切片一样。

>>> calendar.leapdays(2000,2004)
1
>>> calendar.leapdays(2000,2003)
1

image.gif

1.4 month(year,month,w=2,l=1)

返回 year 年 month 月日历,两行标题,一周一行。每日宽度间隔为 w 字符。每行的长度为 7* w+6。l 是每星

期的行数。

>>> print calendar.month(2015, 5)
    May 2015
Mo Tu We Th Fr Sa Su
      1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

image.gif

1.5 monthcalendar(year,month)

返回一个列表,列表内的元素还是列表,这叫做嵌套列表。每个子列表代表一个星期,都是从星期一到星期 日,如果没有本月的日期,则为 0。

>>> calendar.monthcalendar(2015, 5)
[[0, 0, 0, 0, 1, 2, 3], [4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 29, 30, 31]]

image.gif

大家可以将这个结果和 calendar.month(2015, 5) 去对照理解。

1.6 monthrange(year,month)

返回一个元组,里面有两个整数。第一个整数代表着该月的第一天从星期几是(从 0 开始,依次为星期一、星期二,直到 6 代表星期日)。第二个整数是该月一共多少天。

>>> calendar.monthrange(2015, 5)
(4, 31)

image.gif

从返回值可知,2015 年 5 月 1 日是星期五,这个月一共 31 天。这个结果,也可以从日历中看到。

1.7 weekday(year,month,day)

输入年月日,知道该日是星期几(注意,返回值依然按照从 0 到 6 依次对应星期一到星期六)

>>> calendar.weekday(2015, 5, 4)     #星期一
0
>>> calendar.weekday(2015, 6, 4)     #星期四
3

image.gif

2. time

2.1 time()

time 模块是常用的。

>>> import time
>>> time.time()
1430745298.391026

image.gif

time.time() 获得的是当前时间(严格说是时间戳),只不过这个时间对人不友好,它是以 1970 年 1 月 1 日 0 时 0 分 0 秒为计时起点,到当前的时间长度(不考虑闰秒)

UNIX 时间,或称 POSIX 时间是 UNIX 或类 UNIX 系统使用的时间表示方式:从协调世界时 1970 年 1 月 1 日 0 時 0 分 0 秒起至现在的总秒数,不考虑秒

现时大部分使用 UNIX 的系统都是 32 位元的,即它们会以 32 位二進制数字表示时间。但是它们最多只能表示至协调世界时间 2038 年 1 月 19 日 3 时 14 分 07 秒(二进制:01111111 11111111 11111111 11111111,0x7FFF:FFFF),在下一秒二进制数字会是 10000000 00000000 00000000 00000000,(0x8000:0000),这是负数,因此各系统会把时间误解作 1901 年 12 月 13 日 20 时 45 分 52 秒(亦有说回鬼到 1970年)。这时可能会令软件发生问题,导致系统瘫痪。

目前的解決方案是把系統由 32 位元转为 64 位元系统。在 64 位系统下,此时间最多可以表示到 292,277,026,596 年 12 月 4 日 15 时 30 分 08 秒。

有没有对人友好一点的时间显示呢?

2.2 localtime()

>>> time.localtime()
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=4, tm_hour=21, tm_min=33, tm_sec=39, tm_wday=0, tm_yday=124, tm_isdst=0)

image.gif

这个就友好多了。得到的结果可以称之为时间元组(也有括号),其各项的含义是:

索引

属性

含义

0

tm_year

1

tm_mon

2

tm_mday

3

tm_hour

4

tm_min

5

tm_sec

6

tm_wday

一周中的第几天

7

tm_yday

一年中的第几天

8

tm_isdst

夏令时

>>> t = time.localtime()
>>> t[1]
5

image.gif

通过索引,能够得到相应的属性,上面的例子中就得到了当前时间的月份。

其实, time.localtime() 不是没有参数,它在默认情况下,以 time.time() 的时间戳为参数。言外之意就是说可 以自己输入一个时间戳,返回那个时间戳所对应的时间(按照公元和时分秒计时)。例如:

>>> time.localtime(100000)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=11, tm_min=46, tm_sec=40, tm_wday=4, tm_yday=2, tm_isdst=0)

image.gif

2.3 gmtime()

localtime() 得到的是本地时间,如果要国际化,就最好使用格林威治时间。可以这样:

>>> import time
>>> time.gmtime()
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=4, tm_hour=23, tm_min=46, tm_sec=34, tm_wday=0, tm_yday=124, tm_isdst=0)

image.gif

格林威治标准时间(中国大陆翻译:格林尼治平均时间或格林尼治标准时间,台、港、澳翻译:格林威治标准时

间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林威治天文台的标准时间,因为

本初子午线被定义在通过那裡的经线。

还有更友好的:

2.4 asctime()

>>> time.asctime()
'Mon May 4 21:46:13 2015'

image.gif

time.asctime() 的参数为空时,默认是以 time.localtime() 的值为参数,所以得到的是当前日期时间和星期。当然,也可以自己设置参数:

>>> h = time.localtime(1000000)
>>> h
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=12, tm_hour=21, tm_min=46, tm_sec=40, tm_wday=0, tm_yday=12, tm_isdst=0)
>>> time.asctime(h)
'Mon Jan 12 21:46:40 1970'

image.gif

注意, time.asctime() 的参数必须是时间元组,类似上面那种。不是时间戳,通过 time.time() 得到的时间 戳,也可以转化为上面形式:

2.5 ctime()

>>> time.ctime()
'Mon May 4 21:52:22 2015'

image.gif

在没有参数的时候,事实上是以 time.time() 的时间戳为参数。也可以自定义一个时间戳。

>>> time.ctime(1000000)
'Mon Jan 12 21:46:40 1970'

image.gif

跟前面得到的结果是一样的。只不过是用了时间戳作为参数。

在前述函数中,通过 localtime()、gmtime() 得到的是时间元组,通过 time() 得到的是时间戳。有的函数如 asctime() 是以时间元组为参数,有的如 ctime() 是以时间戳为函数。这样做的目的是为了满足编程中多样化的需要。

2.6 mktime()

mktime() 也是以时间元组为参数,但是它返回的不是可读性更好的那种样式,而是:

>>> lt = time.localtime()
>>> lt
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=7, tm_min=55, tm_sec=29, tm_wday=1, tm_yday=125, tm_isdst=0)
>>> time.mktime(lt)
1430783729.0

image.gif

返回了时间戳。就类似于 localtime() 的逆过程(localtime() 是以时间戳为参数)。

以上基本能够满足编程需要了吗?好像还缺点什么,因为在编程中,用的比较多的是“字符串”,似乎还没有将

时间转化为字符串的函数。这个应该有。

2.7 strftime()

函数格式稍微复杂一些

Help on built-in function strftime in module time:

strftime(...) strftime(format[, tuple]) -> string

Convert a time tuple to a string according to a format specification. See the library reference manual for formatting codes. When the time tuple is not present, current time as returned by localtime() is used.

将时间元组按照指定格式要求转化为字符串。如果不指定时间元组,就默认为 localtime() 值。我说复杂,是在于其 format,需要用到下面的东西。

格式

含义

取值范围(格式)

%y

去掉世纪的年份

00-99,如"15"

%Y

完整的年份

如"2015"

%j

指定日期是一年中的第几天

001-366

%m

返回月份

01-12

%b

本地简化月份的名称

简写英文月份

%B

本地完整月份的名称

完整英文月份

%d

该月的第几日

如 5 月 1 日返回"01"

%H

该日的第几时(24 小时制)

00-23

%l

该日的第几时(12 小时制)

01-12

%M

分钟

00-59

%S

00-59

%U

在该年中的第多少星期(以周日为一周起点)

00-53

%W

同上,只不过是以周一为起点

00-53

%w

一星期中的第几天

0-6

%Z

时区

在中国大陆测试,返回 CST,即 China Standard Time

%x

日期

日/月/年

%X

时间

时:分:秒

%c

详细日期时间

日/月/年 时:分:秒

%%

‘%’字符

‘%’字符

%p

上下午

AM or PM

简要列举如下:

>>> time.strftime("%y,%m,%d")
'15,05,05'
>>> time.strftime("%y/%m/%d")
'15/05/05'

image.gif

分隔符可以自由指定。既然已经变成字符串了,就可以“随心所欲不逾矩”了。

2.8 strptime()

Help on built-in function strptime in module time:

strptime(...) strptime(string, format) -> struct_time

Parse a string to a time tuple according to a format specification. See the library reference manual for formatting codes (same as strftime()).

strptime() 的作用是将字符串转化为时间元组。请注意的是,其参数要指定两个,一个是时间字符串,另外一个是时间字符串所对应的格式,格式符号用上表中的。例如:

>>> today = time.strftime("%y/%m/%d")
>>> today
'15/05/05'
>>> time.strptime(today, "%y/%m/%d")
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=125, tm_isdst=-1)

image.gif

3. datetime

虽然 time 模块已经能够把有关时间方面的东西搞定了,但是,在某些调用的时候,还感觉不是很直接,于是又出来了一个 datetime 模块,供程序猿和程序媛们选择使用。

datetime 模块中有几个类:

        • datetime.date:日期类,常用的属性有 year/month/day

        • datetime.time:时间类,常用的有 hour/minute/second/microsecond

        • datetime.datetime:日期时间类

        • datetime.timedelta:时间间隔,即两个时间点之间的时间长度

        • datetime.tzinfo:时区类

3.1 date 类

通过实例了解常用的属性:

>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2015, 5, 5)

image.gif

这里其实生成了一个日期对象,然后操作这个对象的各种属性。用 print 语句,可以是视觉更佳:

>>> print today
2015-05-05
>>> print today.ctime()
Tue May 5 00:00:00 2015
>>> print today.timetuple()
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=125, tm_isdst=-1)
>>> print today.toordinal()
735723

image.gif

特别注意,如果你妄图用 datetime.date.year() ,是会报错的,因为 year 不是一个方法,必须这样行:

>>> print today.year
2015
>>> print today.month
5
>>> print today.day
5

image.gif

进一步看看时间戳与格式化时间格式的转换

>>> to = today.toordinal()
>>> to
735723
>>> print datetime.date.fromordinal(to)
2015-05-05
>>> import time
>>> t = time.time()
>>> t
1430787994.80093
>>> print datetime.date.fromtimestamp(t)
2015-05-05

image.gif

还可以更灵活一些,修改日期。

>>> d1 = datetime.date(2015,5,1)
>>> print d1
2015-05-01
>>> d2 = d1.replace(year=2005, day=5)
>>> print d2
2005-05-05

image.gif

3.2 time 类

也要生成 time 对象

>>> t = datetime.time(1,2,3)
>>> print t
01:02:03

image.gif

它的常用属性:

>>> print t.hour
1
>>> print t.minute
2
>>> print t.second
3
>>> t.microsecond
0
>>> print t.tzinfo
None

image.gif

3.3 timedelta 类

主要用来做时间的运算。比如:

>>> now = datetime.datetime.now()
>>> print now
2015-05-05 09:22:43.142520

image.gif

没有讲述 datetime 类,因为在有了 date 和 time 类知识之后,这个类比较简单,我最喜欢这个 now 方法了。 对 now 增加 5 个小时

>>> b = now + datetime.timedelta(hours=5)
>>> print b
2015-05-05 14:22:43.142520

image.gif

增加两周

>>> c = now + datetime.timedelta(weeks=2)
>>> print c
2015-05-19 09:22:43.142520

image.gif

计算时间差:

>>> d = c - b
>>> print d
13 days, 19:00:00

image.gif

👑👑👑结束语👑👑👑

image.gif

目录
打赏
0
0
0
0
116
分享
相关文章
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
49 20
|
1月前
|
Python的标准库
Python的标准库
173 77
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
106 0
|
1月前
|
Python的标准库
Python的标准库
56 11
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
162 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
83 8
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
125 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库