Python常用内建模块(datetime)

一、思维脑图

Python常用内建模块(datetime)_第1张图片

二、datetime模块介绍

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

1)获取当前日期和时间:

from datetime import datetime
now = datetime.now()               # 获取当前datetime
print(now)

注意:f
rom datetime import datetime表示的是导入datetime模块中的datetime类。
如果,仅仅只是import datetime,那么在下面的编码过程中则需要写:
now = datatime.datetime.now(),略显麻烦!

运行结果如下:

"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/Python全网练习/常用内置模块.py
2017-12-17 16:31:25.362610

Process finished with exit code 0

##通过这条命令我们可以知道now的类型为: datatime

print(type(now))    

运行结果如下:

<class 'datetime.datetime'>

2)获取指定日期和时间

from datetime import datetime
dt = datetime(2017,12,12,23,00)
print(dt)
2017-12-12 23:00:00

注意:在使用datetime进行构造实例时,要遵循特定的规则:
 | Data and other attributes defined here:
 | 
 |  max = datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
 |  
 |  min = datetime.datetime(1, 1, 1, 0, 0)
 |  
 |  resolution = datetime.timedelta(0, 0, 1)

3)datetime转换为timestamp

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

转换的时候,直接调用timestamp()方法即可

from datetime import datetime
dt = datetime(2017,12,17,18,00)   # 用指定日期时间创建datetime
print(dt.timestamp())             # 把datetime转换为timestamp

4)timestamp转换为datetime

from datetime import datetime
t = 1513504800.0             #在这里,我们直接把上面的timestamp拿下来
print(datetime.fromtimestamp(t)) 

运行结果如下:

"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/Python全网练习/常用内置模块.py
2017-12-17 18:00:00

Process finished with exit code 0

5)timestamp转换到UTC标准时区的时间

from datetime import datetime
t = 1513504800.0
print(datetime.fromtimestamp(t))       # 本地时间
print(datetime.utcfromtimestamp(t))    # UTC时间

运行结果:

"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/Python全网练习/常用内置模块.py
2017-12-17 18:00:00     ##本地时间是指当前操作系统设定的时区
2017-12-17 10:00:00     ##格林威治标准时间与本地时间差了8小时,可以反推出本地在地理上位于东八区

Process finished with exit code 0

6)str转换为datetime

from datetime import datetime
a=input("time:")
print(type(a))
cday = datetime.strptime(a, '%Y-%m-%d %H:%M:%S')
print(cday)

运行结果:

"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/Python全网练习/常用内置模块.py
time:2017-12-17 16:12:26
<class 'str'>
2017-12-17 16:12:26

Process finished with exit code 0

7)datetime转换为str

from datetime import datetime
now = datetime.now()
print("转换前时间的类型为:")
print(type(now))
strnow = now.strftime('%a, %b %d, %H:%M')
print("转换后时间的类型为:")
print(type(strnow))
print("结果展示:")
print(strnow)

运行结果:

"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/Python全网练习/常用内置模块.py
转换前时间的类型为:
<class 'datetime.datetime'>
转换后时间的类型为:
<class 'str'>
结果展示:
Sun, Dec 17, 17:05

8)datetime加减

from datetime import datetime, timedelta
now = datetime.now()
now
Out[13]: datetime.datetime(2017, 12, 17, 17, 8, 28, 775024)
now + timedelta(hours=10)
Out[14]: datetime.datetime(2017, 12, 18, 3, 8, 28, 775024)
now
Out[15]: datetime.datetime(2017, 12, 17, 17, 8, 28, 775024)
now - timedelta(days=1)
Out[16]: datetime.datetime(2017, 12, 16, 17, 8, 28, 775024)
now
Out[17]: datetime.datetime(2017, 12, 17, 17, 8, 28, 775024)

9)本地时间转换为UTC时间
本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。
一个datetime类型有一个时区属性tzinfo,但是默认为None,所以无法区分这个datetime到底是哪个时区,除非强行给datetime设置一个时区:

from datetime import datetime, timedelta, timezone
tz_utc_8 = timezone(timedelta(hours=8)) 
now = datetime.now()
now
Out[23]: datetime.datetime(2017, 12, 17, 17, 14, 19, 101426)
dt = now.replace(tzinfo=tz_utc_8)
dt
Out[25]: datetime.datetime(2017, 12, 17, 17, 14, 19, 101426, tzinfo=datetime.timezone(datetime.timedelta(0, 28800)))

10)时区转换
先通过utcnow()拿到当前的UTC时间,再转换为任意时区的时间

from datetime import datetime, timedelta, timezone
# 拿到UTC时间,并强制设置时区为UTC+0:00:
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
# astimezone()将转换时区为北京时间:
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(bj_dt)
# astimezone()将转换时区为东京时间:
tokyo_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
print(tokyo_dt)
# astimezone()将bj_dt转换时区为东京时间:
tokyo_dt2 = bj_dt.astimezone(timezone(timedelta(hours=9)))
print(tokyo_dt2)

运行结果:

"C:\Program Files\Python36\python.exe" C:/Users/Administrator/PycharmProjects/Python全网练习/常用内置模块.py
2017-12-17 09:19:57.707928+00:00
2017-12-17 17:19:57.707928+08:00
2017-12-17 18:19:57.707928+09:00
2017-12-17 18:19:57.707928+09:00

Process finished with exit code 0
注意:
    时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间。
    利用带时区的datetime,通过astimezone()方法,可以转换到任意时区。

你可能感兴趣的:(Python编程)