Python当中, 对日期和时间的操作, 主要使用这三个内置模块:
datetime, time 和 calendar
获取当前时间对应的数字
开发程序时, 经常需要获取两个代码位置在执行时的时间差, 比如, 我们想知道某个函数执行大概耗费了多少时间, 就可以使用 time.time()
获取.
import time
def func():
print('test')
before = time.time()
func()
after = time.time()
print(f'调用func1, 花费时间{after - before}')
time.time()
会返回从 1970年1月1日0点 (所谓的epoch时间点) 到当前时间 经过的秒数, 可以简称为 秒数时间.
执行结果就是:
调用func1, 花费时间1.4066696166992188e-05
指定格式字符串显示时间
以指定格式的字符串显示时间, 是非常实用的, 比如日志里面的时间戳.
要得到 当前时间 对应的字符串, 可以这样实现:
from datetime import datetime
print(str(datetime.now()))
得到的字符串如下:
2025-04-05 15:13:03.773957
如果要指定字符串输出的时间格式, 可以像这样:
datetime.now().strftime('%Y-%m-%d ** %H:%M:%S')
打印出来字符串格式如下:
2025-04-05 ** 15:21:33
当然也可以使用 time 库来格式化显示字符串:
time.strftime('%Y%m%d %H:%M:%S', time.localtime())
打印出来就会显示:
20250405 15:24:23
数字表示的时间转化为字符串表示
如果要将某个指定秒数时间 (从epoch时间点开始计算), 而不是当前时间, 转换为字符串格式, 可以这样写:
time.strftime('%Y%m%d %H:%M:%S', time.localtime(1434502529))
打印出来就会显示:
20150617 08:55:29
字符串时间转换为整数时间
反过来, 如果要将字符串指定的时间, 转换为秒数时间, 可以这样:
int(time.mktime(time.strptime('2015-08-01 23:59:59', '%Y-%m-%d %H:%M:%S')))
打印出来显示的是:
1438444799
ISO格式转化为本地时间
有的时候, 我们的程序获取的时间是 ISO 8601 格式的字符串.
比如:
2008-09-03T20:56:35.450686+00:00
2008-09-03T20:56:35.450686Z
其中, ‘2008-09-03T20:56:35.450686Z’ 这种 Z 结尾的是UTC时间(时区为0).
可以通过以下方法转化为 本地时区 的字符串:
from datetime import datetime
iso_string = '2024-11-24T12:15:34Z'
# 转为 datetime.datetime 类型,UTC 时区
dt_utc = datetime.fromisoformat(iso_string)
# 转为 datetime.datetime 类型, 本地 时区
dt_local = dt_utc.astimezone()
# 格式化为 我们需要的字符串格式
dt_local.strftime('%Y-%m-%d %H:%M:%S')
简化代码就是:
from datetime import datetime
iso_string = '2024-11-24T12:15:34Z'
retStr = datetime.fromisoformat(iso_string)\
.astimezone().strftime('%Y-%m-%d %H:%M:%S')
获取某个时间对应的年月日时分秒数字
要获取 当前时间 的年、月、日、时、分、秒、星期几 对应的数字, 可以使用 datetime 库.
>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2025, 4, 5, 15, 44, 36, 758106)
# 年
>>> datetime.now().year
2025
# 月
>>> datetime.now().month
4
# 日
>>> datetime.now().day
5
# 时
>>> datetime.now().hour
15
# 分
>>> datetime.now().minute
46
# 秒
>>> datetime.now().second
59
# 毫秒
>>> datetime.now().microsecond
620668
# 获取星期几用weekday方法
# 注意: 0代表星期一, 1代表星期二
>>> datetime.now().weekday()
5
>>>
获取指定时间字符串对应星期几
如果要获取的是 某个指定时间, 比如: ‘2018-7-8’, 而不是当前时间, 对应的星期几, 怎么办?
可以使用 datetime 类的 strptime方法, 先产生对应的 datetime 对象
from datetime import datetime
thatDay = '2018-7-8'
# 先把字符串表示的日期转化为 datetime 对象
theDay = datetime.strptime(thatDay, "%Y-%m-%d")
# 再获取星期几
print(theDay.weekday())
注意上面的 .strftime()
和 .strptime()
方法的使用.