time模块和datetime模块
【一】概要
time
模块和 datetime
模块是 Python 中用于处理时间的两个重要模块。
【二】常见用法
time 模块:
time
模块提供了与时间相关的函数,主要用于获取和处理当前时间、时间戳等。
一些常见的功能包括:
time.time()
: 返回当前时间的时间戳(自1970年1月1日午夜以来的秒数)。
time.sleep(seconds)
: 使程序休眠指定秒数。
time.localtime()
: 返回当前时间的结构化时间对象。
time.strftime(format, struct_time)
: 格式化结构化时间对象为字符串。
time.strptime(string, format)
: 将字符串解析为结构化时间对象。
datetime 模块:
datetime
模块提供了处理日期和时间的类,更加灵活和功能强大。
一些常见的功能包括:
datetime.datetime.now()
: 返回当前日期和时间的 datetime
对象。
datetime.timedelta
: 表示两个日期或时间之间的差异。
datetime.strftime(format)
: 将 datetime
对象格式化为字符串。
datetime.strptime(string, format)
: 将字符串解析为 datetime
对象。
【三】time模块详解
【1】时间的三种格式
时间戳(Time stamp)
结构化时间(struct_time)
- 不符合我们人类习惯的,是交由计算机查看的,是时间转换时,中间的桥梁
- time.struct_time(tm_year=2024, tm_mon=1, tm_mday=1, tm_hour=18, tm_min=43, tm_sec=15, tm_wday=0, tm_yday=1, tm_isdst=0)
【1.1】UTC时间
UTC(协调世界时,Coordinated Universal Time)是一种国际标准时间,也被称为世界标准时间。它是通过对全球各地的原子钟测量结果进行平均计算得到的时间。UTC与格林尼治标准时间(GMT)几乎相同,通常可以互换使用,但UTC更加精确。
UTC的特点包括:
- 基准时间: UTC的基准时间是原子钟的平均时间,这使得它更加精确和稳定。与此相对,GMT的基准是地球自转的平均时间。
- 时区无关: UTC不受时区影响,是全球通用的时间标准。它与格林尼治标准时间之间的差异主要是由于地球自转的不规则性而引起的。
- 时间表示: UTC使用24小时制表示时间,没有上午或下午的区分,而且没有夏令时的概念。
在计算机科学中,很多系统和应用程序使用UTC作为时间的基准,因为它能够提供一个统一的、不受地理位置和夏令时变化影响的时间标准。在处理时间戳、日历事件、日志记录等方面,使用UTC能够避免时区差异引起的混淆和错误。
【2】三种时间格式详解
【1】Timestamp(时间戳)
| import time |
| print(time.time()) |
| |
| |
| |
| 当你在不同的时间,不同的地点,输出的值是不同的 |
| import time |
| print(time.time()) |
| time.sleep(1) |
| print(time.time()) |
【2】struck_time(结构化时间)
- 分为localtime(本地时间) 和 gmtime(UTC时间)
| import time |
| print(time.localtime()) |
| |
| print(time.gmtime()) |
| |
| |
- struct_time 元组共有9个元素共九个元素:
- (年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index) |
属性(Attribute) |
值(Values) |
0 |
(年) |
比如2023 |
1 |
tm_mon(月) |
1 - 12 |
2 |
tm_mday(日) |
1 - 31 |
3 |
tm_hour(时) |
0 - 23 |
4 |
tm_min(分) |
0 - 59 |
5 |
tm_sec(秒) |
0 - 60 |
6 |
tm_wday(weekday) |
0 - 6(0表示周一) |
7 |
tm_yday(一年中的第几天) |
1 - 366 |
8 |
tm_isdst(是否是夏令时) |
默认为0 |
| print(time.gmtime()[0]) |
| print(time.gmtime()[1]) |
| print(time.gmtime()[6]) |
| print(time.gmtime().tm_year) |
| print(time.gmtime().tm_mon) |
| print(time.gmtime().tm_wday) |
- time.strftime(format,stuck_time)
- format参数传递的是格式
- struck_time参数传递的是时间元组struck_time
- time.strftime 函数不支持关键字参数传递,只能按照位置顺序传递参数。
| |
| |
| print(time.strftime('%x %X', time.localtime())) |
| |
| |
| print(time.strftime("%y-%m-%d %X",time.localtime())) |
| |
| |
符号 |
含义 |
值 |
%y |
两位数的年份表示 |
(00-99) |
%Y |
四位数的年份表示 |
(000-9999) |
%m |
月份 |
(01-12) |
%d |
月内中的一天 |
(0-31) |
%H |
24小时制小时数 |
(0-23) |
%I |
12小时制小时数 |
(01-12) |
%M |
分钟数 |
(00=59) |
%S |
秒 |
(00-59) |
%a |
本地简化星期名称 |
|
%A |
本地完整星期名称 |
|
%b |
本地简化的月份名称 |
|
%B |
本地完整的月份名称 |
|
%c |
本地相应的日期表示和时间表示 |
|
%j |
年内的一天 |
(001-366) |
%p |
本地A.M.或P.M.的等价符 |
|
%U |
一年中的星期数 |
(00-53)星期天为星期的开始 |
%w |
星期 |
(0-6),星期天为星期的开始 |
%W |
一年中的星期数 |
(00-53)星期一为星期的开始 |
%x |
本地相应的日期表示 |
|
%X |
本地相应的时间表示 |
|
%Z |
当前时区的名称 |
|
%% |
%号本身 |
|
| |
| |
| """ |
| strftime(format[, tuple]) -> string |
| |
| 根据格式规范将时间元组转换为字符串。 |
| 有关格式代码,请参阅库参考手册。当时间元组未提供时,使用由localtime()返回的当前时间。 |
| |
| 常用的格式代码: |
| |
| %Y 十进制数表示的带世纪的年份。 |
| %m 十进制数表示的月份 [01,12]。 |
| %d 十进制数表示的月份中的一天 [01,31]。 |
| %H 十进制数表示的小时(24小时制) [00,23]。 |
| %M 十进制数表示的分钟 [00,59]。 |
| %S 十进制数表示的秒数 [00,61]。 |
| %z 与UTC的时区偏移。 |
| %a 区域设置的缩写星期几名称。 |
| %A 区域设置的完整星期几名称。 |
| %b 区域设置的缩写月份名称。 |
| %B 区域设置的完整月份名称。 |
| %c 区域设置的适当日期和时间表示。 |
| %I 十进制数表示的小时(12小时制) [01,12]。 |
| %p 区域设置的AM或PM的等效表示。 |
| |
| 可能会有其他代码在您的平台上可用。请参阅C库strftime函数的文档。 |
| """ |
| |
【3】时间格式转化
(1) 图示

(2)代码展示
time.localtime()
或time.gmtime()
【时间戳>>>结构化时间】
| import time |
| |
| time_timestamp = time.time() |
| |
| |
| print(time.localtime(time_timestamp)) |
| |
| |
| print(time.gmtime(time_timestamp)) |
| |
time.mktime()
【结构化时间>>>时间戳】
| import time |
| |
| time_struck_time = time.gmtime() |
| print(time_struck_time) |
| |
| |
| |
| print(time.mktime(time_struck_time)) |
| |
| |
| |
| print(time.gmtime(1704080146.0)) |
| |
| |
time.strftime()
【结构化时间>>>格式化时间】
| |
| time_struck_time = time.localtime() |
| |
| |
| print(time.strftime("%Y-%m-%d %X", time_struck_time)) |
| |
time.strptime()
【格式化时间>>>结构化时间】
| time_str = time.strftime("%x %X") |
| format_str = "%x %X" |
| |
| time_obj = time.strptime(time_str, format_str) |
| print(time_obj) |
| |
time.ctime()
【时间戳>>>格式化时间】
- 用于将时间戳转换为可读性较好的字符串表示。它接受一个时间戳参数(默认为当前时间戳),并返回一个表示该时间戳的字符串。
- 相当于time.strftime("%a %b %d %H:%M:%S %Y")
- 帮我们设定好了格式内容
| |
| |
| time_timestamp = time.localtime(time.time()) |
| |
| time_striftime = time.strftime("%a %b %d %H:%M:%S %Y", time_timestamp) |
| print(time_striftime) |
| |
| |
| |
| |
| |
| |
| time_ctime = time.ctime(time.time()) |
| print(time_ctime) |
| |
time.asctime()
【结构化时间>>>格式化时间】
- 用于将时间元组转换为可读性较好的字符串表示。它接受一个表示时间的元组参数,返回一个表示该时间的字符串。
- 相当于time.strftime("%a %b %d %H:%M:%S %Y")
- 帮我们设定好了格式内容
| |
| time_striftime = time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) |
| print(time_striftime) |
| |
| |
| |
| |
| time_asctime = time.asctime(time.localtime()) |
| print(time_asctime) |
| |
【四】datetime模块详解
【1】自定义日期并格式化
| import datetime |
| |
| res = datetime.date(2024, 1, 1) |
| |
| |
| print(res) |
| |
| |
| res1 = datetime.date(2024, 13, 1) |
| print(res1) |
【2】获取本地详细时间(datetime)
datetime.datetime.today()
:
- 返回当前日期和时间的
datetime
对象。
- 不接受时区信息,返回的对象的时区信息为
None
。
- 更符合直觉,通常用于获取当前本地时间。
| res = datetime.datetime.today() |
| print(res) |
| |
datetime.datetime.now([tz])
:
- 返回当前日期和时间的
datetime
对象。
- 可以接受一个时区信息作为可选参数
tz
,用于指定返回的时间对象所在的时区,默认为 None
,表示本地时区。
- 具有更灵活的时区控制,可以用于获取特定时区的当前时间。
| import datetime |
| |
| '''获取本地时间''' |
| current_time_now_local = datetime.datetime.now() |
| print(current_time_now_local) |
| |
| |
| |
| '''获取指定时区的时间''' |
| utc_tz = datetime.timezone.utc |
| |
| current_time_now_utc = datetime.datetime.now(utc_tz) |
| print(current_time_now_utc) |
| |
- 时区转换
- 在实际应用中,时区处理对于处理跨时区的时间信息非常重要,特别是在处理国际化应用或分布在不同地理位置的系统时。
| from datetime import datetime, timezone, timedelta |
| |
| |
| utc_tz = timezone.utc |
| |
| |
| current_time_utc = datetime.now(utc_tz) |
| print("UTC时间:", current_time_utc) |
| |
| |
| new_tz = timezone(timedelta(hours=8)) |
| current_time_new_tz = current_time_utc.astimezone(new_tz) |
| print("转换后的时间:", current_time_new_tz) |
| |
| |
| |
【2.1】通过变量名获取特定的数值
| import datetime |
| |
| |
| now_time = datetime.datetime.today() |
| print(now_time) |
| |
| |
| |
| print(now_time.year) |
| |
| |
| |
| print(now_time.month) |
| |
| |
| |
| print(now_time.day) |
| |
| |
| |
| print(now_time.weekday()) |
| |
| |
| |
| print(now_time.isoweekday()) |
| |
| |
【3】获取本地日期(date)
| import datetime |
| |
| date = datetime.date.today() |
| print(date) |
| |
【4】推迟时间(timedelta)
(1)得到 推迟/提前 的时间
- 通过现在的时间 + 推迟的时间实现推迟时间
- 通过现在的时间 - 推迟的时间实现提前时间
| |
| |
| def __new__(cls, days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0): |
| import datetime |
| |
| now_time = datetime.datetime.today() |
| print(now_time) |
| |
| |
| |
| delta_time = datetime.timedelta(days=2, weeks=3, minutes=35, hours=2, seconds=30, microseconds=40, milliseconds=30) |
| |
| print(now_time + delta_time) |
| |
| |
| |
| print(now_time - delta_time) |
| |
| |
(2)反向得到 推迟/提前 的时间数
| import datetime |
| |
| |
| now_time = datetime.datetime.today() |
| |
| delta_time = datetime.timedelta(days=2, weeks=3, minutes=35, hours=2, seconds=30, microseconds=40, milliseconds=30) |
| |
| |
| delta_today = now_time + delta_time |
| |
| delta_time_count = delta_today - now_time |
| |
| print(delta_time_count) |
【5】小练习:今年还要多少天过生日?
| import datetime |
| |
| |
| birthday = datetime.date(2020, 12, 27) |
| |
| now_date = datetime.date.today() |
| |
| |
| def count(n): |
| delta_time = datetime.timedelta(days=n) |
| time = now_date + delta_time |
| if time.month == 12 and time.day == 27: |
| return n, time |
| return count(n + 1) |
| |
| |
| next_birthday, next_time = count(1) |
| print(f"你的生日是{birthday},你的下一个生日{next_time},在{next_birthday}天后") |
| |
| import datetime |
| |
| mouth = int(input("请输入你的生日月份:").strip()) |
| day = int(input("请输入你的生日日期:").strip()) |
| |
| birthday = datetime.date(2024, mouth, day) |
| |
| now_date = datetime.date.today() |
| |
| |
| def count(n): |
| delta_time = datetime.timedelta(days=n) |
| time = now_date + delta_time |
| if time.month == mouth and time.day == day: |
| return n, time |
| return count(n + 1) |
| |
| |
| next_birthday, next_time = count(1) |
| print(f"你的下一个生日{next_time},在{next_birthday}天后") |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了