在 Python 中处理日期和时间有点麻烦。所幸,Python 提供了一种内置的方式来简化这种操作:Python 的 Datetime 模块。
datetime 可以帮助我们识别并处理与时间相关的元素,如日期,小时,分钟,秒,星期,月份,年份等。它提供了诸如时区和夏令时等很多服务。还可以处理时间戳数据,解析星期几,每月几号,以及从字符串格式化日期和时间等。
简而言之,datetime 是 Python 中处理日期和时间的一大利器。我们现在来深入了解一下。
本节教程中,我们将会学习很多 datetime 中很多详细的方法,包括:
创建日期对象 Date
从日期中获取年份和月份
从日期中获取每月几号和星期几
从日期中获取小时和分钟
从日期中获取一年中的第几周
日期对象转换成时间戳
Unix 时间戳字符串转换成日期对象
处理时间差对象 timedelta
比较两个日期和时间之间的差值
日期格式化:strftime() 和 strptime()
时区处理
使用 Pandas 中的 datetime 对象
获取年,月,日,时,分
获取星期几与一年中的第几天
转换日期对象为 DataFrame 索引
学习本教程时,我们建议你在自己的机器上运行一下这些代码。
Python 的 datetime 类
在编写代码之前,有必要先了解一下 datetime 模块中提供的五个主要的对象类。根据我们具体需要执行的操作,我们可能需要使用其中的一个或多个类。
datatime:允许我们同时操作时间和日期(月,日,年,时,秒,微秒)。
date:允许我们排除时间仅操作日期(月,日,年)
time:允许我们排除日期仅操作时间(时,分,秒,微秒)
timedelta:一个用于操作日期以及测量的时间跨度
tzinfo:一个用于处理时区的抽象类
如果还是不太理解它们之间的区别,也没关系。我们接下来就深入学习一下 datetime 的工作方式,来更好地理解和使用它们。
创建 Date 对象
首先,我们来仔细看看 datetime 对象。由于 datetime 既是模块名也是模块内的类名,所以我们要从 datetime模块内引用 datetime 类。
然后,打印当前日期和时间来查看 datetime 对象中都包含什么。可以使用 datetime 类的 .now() 函数创建一个 datetime 对象,然后打印这个对象,之后再使用 type() 函数打印这个对象的类型。如此,我们可以看到更详细的信息。
从上面的结果中,我们可以看到 datetime_object 是 datetime 类的对象实例,对象中包含了年,月,日,时,分,秒,以及毫秒。
从 Date 中提取年份和月份
我们现在已经理解了 datetime 对象的构成,那么我们可以猜一下 date 和 time 对象是怎样的。因为我们已经知道 date 对象可以理解为 datetime 去掉了时间数据,而 time 对象可以理解为 datetime 去掉了日期数据。
我们还可以解决很多问题。比如,大多数数据集中,日期和时间信息是以字符串格式存储的。另外,我们可能不希望拿到所有的日期和时间数据,当我们在做一些诸如月度销售分析的时候,那么将信息分解到毫秒级别的用处并不大。
现在,我们来聚焦于数据科学中的一项常见任务:使用 datetime 从字符串中提取我们实际想要的元素。
为了实现这个目的,我们还需要做一些其他的工作。
使用 strptime() 和 strftime() 处理日期和时间字符串
幸运的是,datetime 提供了两个方法,strptime() 和 strftime(),可以在字符串与 datetime 对象之间互相转换。strptime() 可以读取字符串中的日期与时间信息并将其转换为 datetime 对象,而 strftime 则是将 datetime 对象转换为字符串。
当然,strptime() 并没有魔法,它不能将任意字符串转换为日期和时间,它需要一些人为地帮助,来解释它究竟识别到了什么。但是它只能识别大多数常规的日期和时间字符串格式(详情请查阅文档)。我们现在给定一个日期格式字符串 "YYYY-MM-DD",来看看 strptime() 方法能做什么。
<