python中的datetime函数_Pythondatetime函数常见⽤法总结Python datetime使⽤指导:操作时间、⽇期和时间区间
在 Python 中处理⽇期和时间是⼀个很⿇烦的问题。幸运的是,Python 提供了内置⽅法来简化这种操作:Python Datetime 模块。
datetime 可以帮助我们识别并处理与时间相关的元素,如⽇期,⼩时,分钟,秒,星期,⽉份,年份等。它还提供了诸如时区和夏令时等很多服务。它可以处理时间戳数据,可以提取星期中的第⼏天,⽉份的第⼏天,以及其他字符串格式的⽇期和时间等。
总结来说,datetime 是 Python 中处理任何⽇期和时间相关问题的强⼤⼿段。本节教程中,我们将会学习很多 datetime 的⽅法,包括:
创建⽇期对象
从⽇期中获取年份和⽉份
从⽇期中获取每⽉⼏号和星期⼏
从⽇期中获取⼩时和分钟
从⽇期中获取⼀年中的第⼏周
⽇期对象转换成时间戳
Unix 时间戳字符串转换成⽇期对象
处理timedelta时间差对象
⽐较两个⽇期和时间之间的差值
⽇期格式化:strftime() 和 strptime()
时区处理
使⽤ Pandas 中的 datetime 对象
获取年,⽉,⽇,时,分
获取星期⼏与⼀年中的第⼏天
转换⽇期对象为 DataFrame 索引
Python 的 datetime 类
在编写代码之前,有必要先了解⼀下 datetime 模块中提供的五个主要的对象类。根据我们具体需要执⾏的操作,我们可能需要使⽤其中的⼀个或多个类。
datatime:允许我们同时操作时间和⽇期(⽉,⽇,年,时,秒,微秒)。
date:允许我们排除时间仅操作⽇期(⽉,⽇,年)
time:允许我们排除⽇期仅操作时间(时,分,秒,微秒)
timedelta:⼀个⽤于操作⽇期以及测量的时间跨度
tzinfo:⼀个⽤于处理时区的抽象类
创建 Date 对象
datetime 既是模块名也是模块内的类名,所以我们要从 datetime 模块内引⽤ datetime 类。
然后,打印当前⽇期和时间来查看 datetime 对象中都包含什么。可以使⽤ datetime 类的 .now() 函数创建⼀个 datetime 对象,然后打印这个对象,之后再使⽤ type() 函数打印这个对象的类型。如此,我
们可以看到更详细的信息。
# import datetime class from datetime module
from datetime import datetime
# get current date
datetime_object = w()
print(datetime_object)
print('Type :- ',type(datetime_object))
2019-10-25 10:24:01.521881
Type :-
从上⾯的结果中,可以看到 datetime_object 是 datetime 类的对象实例,对象中包含了年,⽉,⽇,时,分,秒,以及毫秒。
从 Date 中提取年份和⽉份
现在已经理解了 datetime 对象的构成,可以猜⼀下 date 和 time 对象是怎样的。因为我们已经知道 date 对象可以理解为 datetime 去掉了时间数据,⽽ time 对象可以理解为 datetime 去掉了⽇期数据。
我们也可以反驳⼀些问题。例如,在⼤多数数据集中,⽇期和时间信息都是以字符串格式存储的! 另外,我们可能并不想要所有的⽇期和时间数据--如果我们要做的是⽉度销售分析,那么按微秒来分解就没有什么⽤了。
所以现在,让我们开始挖掘数据科学中的⼀个常见任务:使⽤datetime从字符串中只提取我们实际想要的元素。要做到这⼀点,我们需要做⼏件事。
使⽤ strptime() 和 strftime() 处理⽇期和时间字符串
datetime包含两个⽅法,strptime()和strftime(),⽤于将对象从字符串转换为datetime对象,反之亦然。
当然,strptime()并不神奇--它⽆法将任何字符串转化为⽇期和时间,它需要我们的帮助来解释它所看到的东西!但它能够读取⼤部分的⽇期和时间信息。但它能够读取⼤多数传统的字符串格式的⽇期和时间数据(详情请看⽂档 the documentation for more details)。让我们给它⼀个YYY-MM-DD格式的⽇期字符串,看看它能做什么!
my_string = '2019-10-31'
# Create date object in given time format yyyy-mm-dd
unix时间戳转换日期格式my_date = datetime.strptime(my_string, "%Y-%m-%d")
print(my_date)
print('Type: ',type(my_date))
2019-10-31 00:00:00 Type:
注意,strptime()接收了两个参数:字符串(my_string)和"%Y-%m-%d",另⼀个字符串告诉strptime()如何解释输⼊的字符串
my_string。例如,"%Y "告诉它期望字符串的前四个字符是年份。
这些模式的完整列表可以在⽂档中到,我们将在本教程的后⾯详细介绍这些⽅法。
你可能已经注意到,在⽇期中添加了⼀个00:00:00:00的时间。这是因为我们创建了⼀个datetime对象,它必须包括⼀个⽇期和⼀个时间。00:00:00:00是默认的时间,如果我们输⼊的字符串中没有指定
时间,那么就会被分配到时间。
总之,我们希望能将⽇期中的特定元素分离出来进⾏分析。⼀种⽅法可以使⽤datetime对象的内置类属性来实现,⽐如.month或.year。
print('Month: ', h) # To Get month from date
print('Year: ', ar) # To Get month from year
Month: 10 Year: 2019
从 Date 获取每⽉的某天和⼀周的某天
让我们再提取⼀些信息,因为这真的是⼀个很常见的任务。这⼀次,我们将尝试从my_date中获取⽉份的⽇期和星期的⽇期。Datetime会⽤它的 .weekday()函数给我们⼀个星期的⽇期,但是我们可以使⽤⽇历模块和⼀个叫day_name的⽅法将其转换为⽂本格式(例如星期⼀、星期⼆、星期三......)。
我们将从导⼊⽇历开始,然后在my_date上使⽤.day和.weekday()。从那⾥,我们可以得到⼀个星期的⽇期,以⽂本格式,就像这样。
# import calendar module
import calendar
print('Day of Month:', my_date.day)
# to get name of day(in number) from date
print('Day of Week (number): ', my_date.weekday())
# to get name of day from date
print('Day of Week (name): ', calendar.day_name[my_date.weekday()])
Day of Month: 31 Day of Week (number): 3 Day of Week (name): Thursday
等⼀下,这⾥看起来有⼀点奇怪。⼀周的第三天应该是 Wednesday ⽽不是 Thursday 啊。
我们这⾥使⽤⼀个循环来仔细看⼀下 day_name 变量中的信息:
j = 0
for i in calendar.day_name:
print(j,'-',i)
j+=1
0 - Monday 1 - Tuesday 2 - Wednesday 3 - Thursday 4 - Friday 5 - Saturday 6 - Sunday
现在我们知道 Python 中星期是从 Monday 开始的,其计数下标则是从 0 开始⽽不是从 1 开始。所以这就解释了我们上⾯看到的为什么数字 3 转换成了 "Thursday"。
从 Python 的 Datetime 对象中获取⼩时和分钟
现在,让我们深⼊挖掘time,从datetime对象中提取时分。就像上⾯我们对⽉和年做的那样,我们可以使⽤类属性.hour和.mini来获取当天的⼩时和分钟。
让我们使⽤.now()函数设置⼀个新的⽇期和时间。截⾄本⽂写作时,现在是2019年10⽉25⽇上午10点25分。当然,根据你选择在什么时候运⾏这段代码,你会得到不同的结果,当然了!
from datetime import datetime todays_date = w()
# to get hour from datetime
print('Hour: ', todays_date.hour)
# to get minute from datetime
print('Minute: ', todays_date.minute)
Hour: 10 Minute: 25
从 Datetime 对象中获取⼀年中的星期数
我们还可以⽤⽇期时间来做更多的事情。例如,如果我们想知道今年是哪⼀周呢?我们可以⽤.isocalendar()函数从⼀个datetime对象中获取年份、星期和星期的⽇期。具体来说,isocalendar()
函数返回⼀个包含ISO年、周号和星期的tuple。ISO⽇历是⼀种基于Gregorian历法的标准⽇历,被⼴泛使⽤。你可以在这个链接中详细了解它,但就我们的⽬的⽽⾔,我们只需要知道它的⼯作原理是作为⼀个普通的⽇历,从每周⼀开始。
# Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
todays_date.isocalendar()
(2019, 43, 5)
注意,在 ISO ⽇历中,每星期是从 1 开始计数的,所以这⾥的 5 真正表⽰的是星期五:Friday。
从上⾯我们可以看到当前是今天的第 43 个星期,但是如果你只想获得这个数字,可以像其他 Python 中的列表或元组⼀样,使⽤下标索引的⽅式实现:
todays_date.isocalendar()[1]
43
将 Date 对象转换为 Unix 时间戳,反之亦然
在编程中,我们经常会遇到以时间戳形式存储时间和⽇期数据的情况,或者想将⾃⼰的数据以Unix的时间戳格式存储。
我们可以使⽤datetime内置的timestamp()函数来实现,它以⼀个datetime对象作为参数,并以时间戳格式返回⽇期和时间。
#import datetime
from datetime import datetime
# get current date
now = w()
# convert current date into timestamp
timestamp = datetime.timestamp(now)
print("Date and Time :", now)
print("Timestamp:", timestamp)
Date and Time : 2019-10-25 10:36:32.827300 Timestamp: 1572014192.8273
同样,我们可以使⽤fromtimestamp()进⾏反向转换。这是⼀个datetime函数,它以时间戳(float格式)作为参数,返回⼀个datetime对象,如下图所⽰。
#import datetime
from datetime import datetime
timestamp = 1572014192.8273
#convert timestamp to datetime object
dt_object = datetime.fromtimestamp(timestamp)
print("dt_object:", dt_object)
print("type(dt_object): ", type(dt_object))
dt_object: 2019-10-25 10:36:32.827300 type(dt_object):
使⽤timedelta对象测量时间跨度
通常情况下,我们可能想⽤Python的datetime来测量⼀个时间跨度或持续时间。我们可以通过其内置的 timedelta 类来实现。timedelta 对象表⽰两个⽇期或时间之间的时间量。我们可以⽤它来测量时间跨度,或者通过加减法来操作⽇期或时间等。
默认情况下,timedelta对象的所有参数都设置为0。让我们创建⼀个新的时间长度为两周的timedelta对象,看看效果如何。
#import datetime
from datetime import timedelta
# create timedelta object with difference of 2 weeks
d = timedelta(weeks=2)
print(d)
print(type(d))
print(d.days)
14 days, 0:00:00 14
注意,我们可以通过使⽤ timedelta 类属性 .days 来获取时间持续时间,单位为天。我们可以在它的⽂档中看到,我们也可以得到这个时间持续时间,单位为秒或微秒。
让我们再创建⼀个时间持续时间,以获得更多的练习:
year = timedelta(days=365)
print(year)
365 days, 0:00:00
现在,让我们开始使⽤timedelta对象和datetime对象⼀起做⼀些数学运算吧! 具体来说,让我们在当前时间和⽇期中加⼊⼏个不同的时间持续时间,看看15天后是什么⽇期,两周前是什么⽇期。
要做到这⼀点,我们可以使⽤+或-操作符来将timedelta对象添加或减去datetime对象。结果将是datetime对象加上或减去我们的timedelta对象中指定的时间长度。很酷吧?
(注意:在下⾯的代码中,现在是10⽉25⽇上午11点12分;你的结果会根据你运⾏代码的时间⽽有所不同,因为我们使⽤.now()函数获取datetime对象)。
#import datetime
from datetime import datetime, timedelta
# get current time
now = w()
print ("Today's date: ", str(now))
#add 15 days to current date
future_date_after_15days = now + timedelta(days = 15)
print('Date after 15 days: ', future_date_after_15days)
#subtract 2 weeks from current date
two_weeks_ago = now - timedelta(weeks = 2)
print('Date two weeks ago: ', two_weeks_ago)
print('two_weeks_ago object type: ', type(two_weeks_ago))
Today's date: 2019-10-25 11:12:24.863308 Date after 15 days: 2019-11-09 11:12:24.863308 Date two weeks ago: 2019-10-11 11:12:24.863308 two_weeks_ago object type:
请注意,这些数学运算的输出仍然是⼀个⽇期时间对象。
出两个⽇期和时间之间的差值
与上⾯的⽅法类似,我们也可以⽤datetime从另⼀个⽇期中减去⼀个⽇期,到它们之间的时间跨度。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论