亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

精通 Python datetime:日期、时间与时区实战指南

精通 Python datetime

通过实战示例与清晰讲解,学习在 Python 中处理日期和时间。

视频:Python datetime——处理日期与时间

Python datetime 模块提供强大工具操作日期和时间。下面演示常见任务,从获取当前时刻到格式化和时区处理。


示例 1:获取当前日期和时间

import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)

输出类似:

2018-12-19 09:26:03.478039

此处用 import datetime 导入模块。datetime 类含 now() 方法返回本地日期时间。


示例 2:获取当前日期

import datetime
date_object = datetime.date.today()
print(date_object)

输出:

2018-12-19

用 date 类的 today() 类方法获取当前日历日期。


探索 datetime 模块

运行 dir(datetime) 列出所有属性和类:

import datetime
print(dir(datetime))

输出:

['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

关键类包括 date、time、datetime 和 timedelta。


datetime.date 类

date 类表示日历日期(年、月、日)。


示例 3:创建日期对象

import datetime
d = datetime.date(2019, 4, 13)
print(d)

结果:

2019-04-13

date() 构造函数接受 year、month、day 参数。变量 a 为 date 实例。


仅导入 date 类:

from datetime import date
a = date(2019, 4, 13)
print(a)

示例 4:当前日期

用 today() 类方法:

from datetime import date
today = date.today()
print("Current date =", today)

示例 5:从时间戳

Unix 时间戳计算自 1970-01-01 UTC 的秒数。用 fromtimestamp() 转换:

from datetime import date
timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)

输出:

Date = 2012-01-11

示例 6:访问年、月、日

from datetime import date
today = date.today()
print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)

datetime.time

time 类存储无日期的时钟时间。


示例 7:创建时间对象

from datetime import time
a = time()
print("a =", a)
b = time(11, 34, 56)
print("b =", b)
c = time(hour=11, minute=34, second=56)
print("c =", c)
d = time(11, 34, 56, 234566)
print("d =", d)

结果:

a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566

示例 8:检查时间组件

from datetime import time
a = time(11, 34, 56)
print("hour =", a.hour)
print("minute =", a.minute)
print("second =", a.second)
print("microsecond =", a.microsecond)

输出:

hour = 11 minute = 34 second = 56 microsecond = 0

datetime.datetime

datetime 类结合日期和时间信息。


示例 9:创建 datetime 对象

from datetime import datetime
# 年、月、日
A = datetime(2018, 11, 28)
print(A)
# 完整规格
B = datetime(2017, 11, 28, 23, 55, 59, 342380)
print(B)

结果:

2018-11-28 00:00:00 2017-11-28 23:55:59.342380

年、月、日为必填;时、分、秒、微秒默认为零。


示例 10:检查组件与时间戳

from datetime import datetime
A = datetime(2017, 11, 28, 23, 55, 59, 342380)
print("year =", A.year)
print("month =", A.month)
print("day =", A.day)
print("hour =", A.hour)
print("minute =", A.minute)
print("timestamp =", A.timestamp())

输出:

year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238

datetime.timedelta

timedelta 对象表示两个日期或时间间的持续时间。


示例 11:日期与时间差值

from datetime import datetime, date
T1 = date(year=2018, month=7, day=12)
T2 = date(year=2017, month=12, day=23)
T3 = T1 - T2
print("T3 =", T3)
T4 = datetime(year=2018, month=7, day=12, hour=7, minute=9, second=33)
T5 = datetime(year=2019, month=6, day=10, hour=5, minute=55, second=13)
T6 = T4 - T5
print("T6 =", T6)
print("type of T3 =", type(T3))
print("type of T6 =", type(T6))

输出:

T3 = 201 days, 0:00:00 T6 = -333 days, 1:14:20 type of T3 = <class 'datetime.timedelta'> type of T6 = <class 'datetime.timedelta'>

示例 12:timedelta 对象相减

from datetime import timedelta
T1 = timedelta(weeks=2, days=5, hours=1, seconds=33)
T2 = timedelta(days=4, hours=11, minutes=4, seconds=54)
T3 = T1 - T2
print("T3 =", T3)

输出:

T3 = 14 days, 13:55:39

示例 13:负 timedelta

from datetime import timedelta
T1 = timedelta(seconds=33)
T2 = timedelta(seconds=54)
T3 = T1 - T2
print("T3 =", T3)
print("abs(T3) =", abs(T3))

输出:

T3 = -1 day, 23:59:39 abs(T3) = 0:00:21

示例 14:timedelta 总秒数

from datetime import timedelta
T = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("total seconds =", T.total_seconds())

输出:

total seconds = 435633.233423

可对日期加减,用数字乘除 timedelta 缩放持续时间。


格式化与解析日期

不同地区用不同日期格式(如美式 mm/dd/yyyy 对英式 dd/mm/yyyy)。Python strftime() 和 strptime() 方法帮助在 datetime 对象和格式化字符串间转换。


Python strftime() —— datetime 转字符串

from datetime import datetime
now = datetime.now()
# 时:分:秒
T = now.strftime("%H:%M:%S")
print("time:", T)
# 美式格式
S1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("S1:", S1)
# 英式格式
S2 = now.strftime("%d/%m/%Y, %H:%M:%S")
print("S2:", S2)

典型输出:

time: 04:34:52 S1: 12/26/2018, 04:34:52 S2: 26/12/2018, 04:34:52

常用格式码:%Y 年、%m 月、%d 日、%H 时、%M 分、%S 秒。


Python strptime() —— 字符串转 datetime

from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)

输出:

date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00

此处 %d 为日、%B 全月名、%Y 年。


时区感知

需在不同时区显示或计算时间的应用,避免手动计算,使用 pytz 库。

from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone('America/New_York')
dt_NY = datetime.now(tz_NY)
print("NY:", dt_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_London = pytz.timezone('Europe/London')
dt_London = datetime.now(tz_London)
print("London:", dt_London.strftime("%m/%d/%Y, %H:%M:%S"))

示例输出:

Local: 12/20/2018, 13:10:44 NY: 12/20/2018, 08:10:44 London: 12/20/2018, 13:10:44

datetime_NY 和 datetime_London 对象包含时区感知时间戳。

Python

  1. 精通Python数据类型:实战指南
  2. 精通Python运算符:全面指南
  3. 精通Python Pass语句:实战指南
  4. 精通Python函数参数:位置、关键字与默认参数
  5. 精通 Python 字典:创建、操作与进阶技巧
  6. 精通 Python 迭代器:工作原理与自定义构建
  7. Python 闭包详解:嵌套函数如何捕获变量
  8. Python 获取当前日期和时间:实用指南
  9. Python 轻松获取当前时间与时区数据
  10. 精通 Python time.sleep():最佳实践、多线程与实战案例
  11. Python 语言概览:高级、可读、交互式与面向对象
  12. Python 数字类型详解:不可变数值数据的操作与数学函数