Python⽇期和时间函数使⽤指南
在本教程中,我们将介绍 python 的 datetime 模块以及如何使⽤它来处理⽇期、时间,以及⽇期时间的格式化处理。它包含各种实⽤⽰例,可帮助您通过 python 函数更加快捷⾼效进⾏⽇期和时间处理。
⼀般来说,⽇期类型列不容易操作,因为它带来很多挑战,例如处理闰年,⼀个⽉中的不同天数,不同的⽇期和时间格式,或者⽇期值是否以字符串(字符)格式存储等等。
1. datatime 模块
它是⼀个 python 模块,它提供了⼏个处理⽇期和时间的函数。它有以下四个类,在本⽂的后半部分将解释这些类是如何⼯作的。
datetime
date
time
timedelta
没有使⽤真实数据集经验的⼈可能没有遇到 date columns。在他们的印象中可能会觉得使⽤⽇期的机会很少⽽且不那么重要。为了启发他们,我列出了现实世界的例⼦,其中使⽤ datetime 模块的好处可能是⾮常明显的。
选择 2018 年 6 ⽉ 30 ⽇活跃的所有储蓄账户持有⼈,并检查他们的状态是否仍然有效;
确定在过去 3 个⽉内提交超过 20 件索赔的被保险⼈;
识别在过去 6 个⽉内进⾏多笔交易的客户;
从时间戳值中提取⽇期。
导⼊ datetime 模块
您可以使⽤以下命令导⼊或加载 datetime 模块:
import datetime
您不需要安装此模块,因为它与 python 软件的安装捆绑在⼀起。
2. Dates
这⾥我们使⽤ datetime.date 类来表⽰⽇历⽇期值。today() ⽅法⽤于获取当前⽇期。
>>> import datetime
>>> day()
datetime.date(2019, 9, 10)
为了将其显⽰为正确的⽇历⽇期,我们可以将其包装在 print() 命令中。
>>> print(day())
2019-09-10
2.1 创建 Date 对象
⽇期类遵循如下所⽰的语法:date(year, month, day)
>>> dt = datetime.date(2019, 10, 20)
>>> print(dt)
2019-10-20
2.2 从 date 值中提取 day, month 和 year
>>> dt = datetime.date(2019, 10, 20)
>>> dt.day
20
>>> dt.month
10
>>> dt.year
2019
2.3 ⾃定义⽇期格式
您可以使⽤ strftime ⽅法定义⽇期格式来⾃定义⽇期格式。它将⽇期对象转换为字符串。
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:857662006 寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
>>> dt = datetime.date(2019, 10, 20)
>>> print(dt)
2019-10-20
>>> dt.strftime("%d-%m-%Y")
'20-10-2019'
%d 指的是⼀个⽉中的某⼀天。在 20-10-2019 中, %d 返回 20。
%m 指的是⼀年中的某个⽉。在 20-10-2019 中, %m 返回 10。
%Y 指的是年。字母 ‘Y’ 是⼤写的。在 20-10-2019 中,%Y 返回 2019 年。
%y 指的是两位数格式的年份。在 20-10-2019 中,%y 返回 19。
其他流⾏的格式代码:
%a 返回⼯作⽇的前三个字母,如 Sun ;
%A 返回⼯作⽇的完整名称,如 Sunday;
%b 返回⽉份的前三个字母,如 Oct ;
%B 返回⽉份的完整名称,如 October ;
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:857662006 寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
>>> dt = datetime.date(2019, 10, 20)
>>> dt.strftime("%d/%m/%Y")
'20/10/2019'
>>> dt.strftime("%b %d, %Y")
'Oct 20, 2019'
>>> dt.strftime("%B %d, %Y")
'October 20, 2019'
>>> dt.strftime("%a %B %d, %Y")
'Sun October 20, 2019'
>>> dt.strftime("%A %B %d, %Y")
'Sunday October 20, 2019'
>>> dt.strftime("%A, %B %d, %Y")
'Sunday, October 20, 2019'
3. Time
时间值使⽤ datetime.time 类定义。它遵循如下所⽰的语法:
datetime.time(hour, minute, second, microseconds)
>>> t = datetime.time(21, 2, 3)
>>> print(t)
21:02:03
3.1 从时间值获取⼩时,分钟和秒
>>> t = datetime.time(21, 2, 3)
>>> t.hour
21
>>> t.minute
2
>>> t.second
3
>>> t.microsecond
3.2 将时间转换为 AM PM 格式
%I 将 24 ⼩时时间格式转换为 12 ⼩时格式。
%p 根据时间值返回 AM PM。
%H 返回时间值的⼩时数。
%M 返回时间值的分钟数。
%S 返回时间值的秒数。
>>> t = datetime.time(21, 2, 3)
>>> print(t)
21:02:03
>>> t.strftime("%I:%M %p")
'09:02 PM'
4. 同时处理 Dates 和 Time
datetime 库有另⼀个名为 datetime.datetime 的类,⽤于表⽰⽇期加时间。你可以称之为时间戳。now() 或 today() ⽅法的 datetime 类⽤于提取当前⽇期和时间。
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:857662006 寻有志同道合的⼩伙伴,互帮互助,
⾥还有不错的视频学习教程和PDF电⼦书!
'''
>>> dt = w()
>>> print(dt)
2019-09-10 10:45:46.941261
%c 表⽰当地的⽇期和时间。%X 表⽰当地的时间。
>>> dt = w()
>>> print(dt)
2019-09-10 10:45:46.941261
>>> dt.strftime("%c")
'Tue Sep 10 10:45:46 2019'
>>> dt.strftime("%A %B %d %X")
'Tuesday September 10 10:45:46'
>>> dt.strftime("%A %B %d %H:%M")
'Tuesday September 10 10:45'
4.1 创建 datetime 对象
datetime 类的语法如下:
datetime(year, month, day, hour, minute, second, microsecond)
>>> dt = datetime.datetime(2019, 7, 20, 10, 51, 0)
>>> print(dt)
2019-07-20 10:51:00
>>> dt.strftime('%d-%m-%Y %H-%M')
'20-07-2019 10-51'
4.2 在 python 中将字符串转换为 datetimeunix时间戳转换日期格式
>>> from dateutil.parser import parse
>>> print(parse('March 01, 2019'))
2019-03-01 00:00:00
5. 如何获取当前的时间?
我们可以使⽤我们在上⼀节中使⽤的相同函数,并使⽤ time() ⽅法从返回值中提取时间。
print(dt.time())
6. 如何获取当前周的天?
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:857662006 寻有志同道合的⼩伙伴,互帮互助,
⾥还有不错的视频学习教程和PDF电⼦书!
'''
>>> dt = w()
>>> print(dt)
2019-09-10 10:58:10.044233
>>> dt.strftime("%A %B %d %H:%M")
'Tuesday September 10 10:58'
>>> dt.isoweekday()
2
7. 计算未来或过去的⽇期
通过使⽤ timedelta ,您可以添加或减去天,周,⼩时,分钟,秒,微秒和毫秒。当您想要计算未来或过去的⽇期时,它⾮常有⽤。假设您要求识别过去 30 天内注册产品的所有客户。要解决此问题,您需要计算今天⽇期之前 30 天的⽇期。
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:857662006 寻有志同道合的⼩伙伴,互帮互助,
⾥还有不错的视频学习教程和PDF电⼦书!
'''
>>> dt = w()
>>> print(dt)
2019-09-10 11:01:54.959386
#30 days ahead
>>> delta = datetime.timedelta(days=30)
>>> print(dt + delta)
2019-10-10 11:01:54.959386
#30 days back
>>> print(dt - delta)
2019-08-11 11:01:54.959386
>>> delta = datetime.timedelta(days= 10, hours=3, minutes=30, seconds=30)
>>> print(dt + delta)
2019-09-20 14:32:24.959386
>>> delta = datetime.timedelta(weeks= 4, hours=3, minutes=30, seconds=30)
>>> print(dt + delta)
2019-10-08 14:32:24.959386
在 timedelta 中,缺少⽉份和年份选项,这意味着您⽆法按⽉(s) 或年(s) 计算未来⽇期增量。要完成此任务,我们可以使⽤ dateutil 包。让我们通过提交以下代码来导⼊此包:
lativedelta import *
如果 dateutil 包未安装在您的系统上,请通过运⾏此命令 pip install python-dateutil 来安装它。
>>> lativedelta import *
>>> dt = datetime.datetime(2019, 7, 20, 10, 51, 0)
>>> print(dt)
2019-07-20 10:51:00
#1 Month ahead
>>> print(dt + relativedelta(months=+1))
2019-08-20 10:51:00
#1 Month Back
>>> print(dt + relativedelta(months=-1))
2019-06-20 10:51:00
如果您想知道这个 relativedelta(months = + 1) 与 datetime.timedelta(days = 30) 有何不同,请观察两个命令的返回值(结果)。
由于 7 ⽉有 31 天,提前 30 天使⽤此 datetime.timedelta(days=30) 返回 2019-08-19 10:51:00。relativedelta(months=+1) 返回 2019-08-20 10:51:00 这是⼀个完整的 1 个⽉。
#Next month, plus one week
>>> print(dt + relativedelta(months=+1, weeks=+1))
2019-08-27 10:51:00
#Next Year
>>> print(dt + relativedelta(years=+1))
2020-07-20 10:51:00
7.1 考虑闰年
来⾃ dateutil 包的 relativedelta ⽅法在计算未来或过去⽇期时会同时考虑闰年的情况。2000 年是闰年,所以 2 ⽉份有 29 天;但明年 2⽉只有 28 天。
>>> print(datetime.date(2000, 2, 29)+ relativedelta(years=+1))
2001-02-28
8. 两个⽇期之间的差异
假设您需要计算两个⽇期之间的天数。当您需要计算特定信息客户的使⽤期限时,即当他们开⽴账户(开始⽇期)和账户关闭时(结束⽇期)时,这是⼀个⾮常常见的数据问题陈述。
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:857662006 寻有志同道合的⼩伙伴,互帮互助,
⾥还有不错的视频学习教程和PDF电⼦书!
'''
>>> date1 = datetime.date(2020, 10, 25)
>>> date2 = datetime.date(2019, 12, 25)
>>> diff = date1- date2
>>> diff.days
305
8.1 如何计算两个⽇期之间的⽉数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。