python笔记:常用内建模块—datetime

datetime是Python处理日期和时间的标准库。

一、获取当前日期和时间

python笔记:常用内建模块—datetime_第1张图片

注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。

如果仅导入import datetime,则必须引用全名datetime.datetime。

python笔记:常用内建模块—datetime_第2张图片

二、获取指定日期和时间

直接用参数构造一个datetime

python笔记:常用内建模块—datetime_第3张图片

三、datetime与timestamp及str与datetime的相互转换

3.1datetime转换为timestamp

在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。

实现:调用timestamp()方法

python笔记:常用内建模块—datetime_第4张图片

注意:Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数。某些编程语言(如Java和JavaScript)的timestamp使用整数表示毫秒数,这种情况下只需要把timestamp除以1000就得到Python的浮点表示方法。

3.2 timestamp转换为datetime

3.2.1  timestamp转换为本地的datetime

实现:使用datetime提供的fromtimestamp()方法

注意:注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换。本地时间是指当前操作系统设定的时区。例如北京时区是东8区,则本地时间:

2015-04-19 12:20:00

实际上就是UTC+8:00时区的时间:

2015-04-19 12:20:00 UTC+8:00

而此刻的格林威治标准时间与北京时间差了8小时,也就是UTC+0:00时区的时间应该是:

2015-04-19 04:20:00 UTC+0:00

3.2.2  timestamp转换为UTC标准时区的datetime

实现:使用datetime提供的utcfromtimestamp()方法

python笔记:常用内建模块—datetime_第5张图片python笔记:常用内建模块—datetime_第6张图片

3.3 str转换为datetime

很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。

实现:转换方法是通过datetime.strptime()实现

需要一个日期和时间的格式化字符串:


注意:转换后的datetime是没有时区信息的。

3.4 datetime转换为str

如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str

实现:strftime()

同样需要一个日期和时间的格式化字符串:

python笔记:常用内建模块—datetime_第7张图片

四、datetime加减

对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。可见,使用timedelta你可以很容易地算出前几天和后几天的时刻。

实现:需要导入timedelta这个类,加减可以直接用+和-运算符,可以写在timedelta()的前面,也可以写在hours,days的值前面

python笔记:常用内建模块—datetime_第8张图片

五、本地时间转换为UTC时间

本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。

一个datetime类型有一个时区属性tzinfo,但是默认为None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区:

实现:利用replace()强制设置datetime的tzinfo属性

python笔记:常用内建模块—datetime_第9张图片

注意:如果系统时区恰好是UTC+8:00,那么上述代码就是正确的,否则,不能强制设置为UTC+8:00时区

六、时区转换

我们可以先通过utcnow()拿到当前的UTC时间,再转换为任意时区的时间,也可以从任意时区时间转到任意时区时间

实现:使用datetime.utcnow()拿到当前utc时间,并使用replace(tzinfo=timezone.utc)强行设置时区为utc+:0:00

          转化时区使用astimezone()方法

python笔记:常用内建模块—datetime_第10张图片

注意:时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间

利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。

七、练习

假设你获取了用户输入的日期和时间如2015-1-21 9:01:30,以及一个时区信息如UTC+5:00,均是str,请编写一个函数将其转换为timestamp:

代码:

python笔记:常用内建模块—datetime_第11张图片
运行:

python笔记:常用内建模块—datetime_第12张图片

思路总结 :

str转化为timestamp 

1、首先经过年月日str转化为datetime

2、将时区str UTC-7:00提取字符7转化为int型

3、因为 datetime 的时区没有指定,故强制设置时区为 timestamp

4、将设置时区后的datetime转化为timestamp

实施:

1、str 转化为 datetime,使用datetime.strptime()

2、将 UTC-7:00 转化为单个字符,使用正则表达式的group( )进行提取,并使用int()转化为int型

3、强制设置 datetime 的 tzinfo属性 tzinfo=timezone(timedelta(hours=tz))

4、使用 datetime.timestamp()将datetime类型转化为timestamp类型

你可能感兴趣的:(python,foundation)