Python 学习之常用内建模块(datetime)

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

获取当前日期和时间

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

# 获取当前datetime:
now = datetime.now()
print(now)
print(type(now))

注意: datetime 是模块,datetime 模块还包含一个 datetime 类,通过 from datetime import datetime 导入的才是 datetime 这个类。
如果仅导入 import datetime,则必须引用全名 datetime.datetime。
datetime.now() 返回当前日期和时间,其类型是 datetime。

获取指定日期和时间

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

t = datetime(2020,5,20,13,14)
print(t)

datetime 转换为 timestamp

在计算机中,时间实际上是用数字表示的。我们把 1970 年 1 月 1 日 00:00:00 UTC+00:00 时区的时刻称为 epoch time ,记为 0(1970年以前的时间timestamp为负数),当前时间就是相对于 epoch time 的秒数,称为timestamp。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

t = datetime(2020,5,20,13,14)
print(t.timestamp())

注意: Python 的 timestamp 是一个浮点数。如果有小数位,小数位表示毫秒数。

timestamp 转换为 datetime

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

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

t = 1589951640.0
print(datetime.fromtimestamp(t))        # 本地时间
print(datetime.utcfromtimestamp(t))  # UTC时间

注意: timestamp 是一个浮点数,它没有时区的概念,而 datetime 是有时区的。

str 转换为 datetime

使用 datetime 提供的 strptime() 方法:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

day = datetime.strptime('2020-5-20 13:14:00','%Y-%m-%d %H:%M:%S')
print(day)

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

datetime 转换为 str

转换方法是通过 strftime() 实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime

now = datetime.now()

print(now.strftime('%a, %b %d %H:%M'))

datetime 加减

需要导入 timedelta 这个类,使用 timedelta 你可以很容易地算出前几天和后几天的时刻。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime, timedelta

cday = datetime.strptime('2020-5-20 13:14:00', '%Y-%m-%d %H:%M:%S')

print('current datetime =', cday)
print('current + 10 hours =', cday + timedelta(hours=10))
print('current - 1 day =', cday - timedelta(days=1))
print('current + 2.5 days =', cday + timedelta(days=2, hours=12))

本地时间转换为 UTC 时间

本地时间是指系统设定时区的时间,例如北京时间是 UTC+8:00 时区的时间,而UTC时间指 UTC+0:00 时区的时间。
时区转换的关键在于,拿到一个 datetime 时,要获知其正确的时区,然后强制设置时区,作为基准时间。
利用带时区的 datetime,通过 astimezone() 方法,可以转换到任意时区。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' 内建模块—datetime '

__author__ = 'Kevin Gong'

from datetime import datetime, timedelta, timezone

utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
utc8_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print('UTC+0:00 now =', utc_dt)
print('UTC+8:00 now =', utc8_dt)

注意:不是必须从 UTC+0:00 时区转换到其他时区,任何带时区的 datetime 都可以正确转换。

小结

datetime 表示的时间需要时区信息才能确定一个特定的时间,否则只能视为本地时间。

如果要存储 datetime,最佳方法是将其转换为 timestamp 再存储,因为 timestamp 的值与时区完全无关。

猜你喜欢

转载自blog.csdn.net/duoduo_11011/article/details/106463289