Python时间处理通关指南:datetime/arrow/pandas实战

Python时间处理通关指南:datetime/arrow/pandas实战

【导语】 凌晨三点,线上服务突然报错------用户在美国下的订单,系统显示成了第二天?日志里时间戳全部混乱,排查三小时发现是时区处理翻车了。如果你也踩过Python时间处理的坑,这篇文章就是为你准备的。

本文从标准库datetime的底层原理讲起,到arrow的简洁优雅,再到pandas的时间序列大杀器,覆盖99%的Python时间处理场景。全文附代码示例、时区避坑指南、工程落地建议,看完你也能写出"时间不打架"的健壮代码。


📌 一、引言:Python时间处理的"三重境界"

时间处理是所有编程语言中最容易出错的领域之一。在Python中,根据处理能力的不同,我们可以把开发者分为三个层级:

🔰 第一重:新手境界------只会用datetime.strftime/strptime

  • 能创建datetime对象,会用strftime格式化输出
  • 会用strptime从字符串解析时间
  • 遇到时区就懵了,本地时间和UTC傻傻分不清
  • 典型代码datetime.now().strftime("%Y-%m-%d %H:%M:%S")

🚀 第二重:进阶境界------掌握时区处理(pytz/zoneinfo)

  • 理解naiveaware datetime的区别
  • 能用pytzzoneinfo处理时区转换
  • 知道数据库应该存UTC,展示层转本地时间
  • 典型能力utc_time.astimezone(local_tz)

🏆 第三重:高手境界------用arrow/pandas处理复杂场景

  • arrow一行代码搞定人性化输出("2小时前")
  • pandas处理百万级时间序列数据
  • 精通重采样、缺失填充、时区批量转换
  • 典型场景:分析用户行为时间分布、处理跨时区日志、时间序列可视化

📖 本文价值

本文将从标准库基础 出发,循序渐进讲解datetime的核心概念,然后带你上手Arrowpandas 这两个生产力神器。通过代码示例+避坑指南+工程落地,一次性打通Python时间处理的任督二脉。


🏗️ 二、标准库datetime:基础为王(约2000字)

2.1 datetime核心组件

Python标准库datetime包含几个核心类,先来一张全家福:

用途 是否含时区
datetime 日期+时间(最常用) 可选(aware)或不含(naive)
date 日期(年-月-日)
time 时间(时:分:秒.微秒) 可选(需要传入tzinfo)
timedelta 时间差(支持天数、秒、微秒)
tzinfo 时区信息抽象基类 -

2.2 基础操作:时间创建

python 复制代码
from datetime import datetime, date, time, timedelta

# 1. 获取当前时间(本地时间,naive)
now = datetime.now()
print(f"当前本地时间:{now}")  # 2026-03-24 14:30:45.123456

# 2. 获取当前UTC时间(naive)
utc_now = datetime.utcnow()
print(f"当前UTC时间:{utc_now}")  # 2026-03-24 06:30:45.123456

# 3. 创建指定时间
dt = datetime(2026, 3, 24, 14, 30, 0)
print(f"指定时间:{dt}")  # 2026-03-24 14:30:00

# 4. 从字符串解析
dt_str = "2026-03-24 14:30:00"
parsed = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
print(f"解析结果:{parsed}")  # 2026-03-24 14:30:00

2.3 时间运算:加减、比较、时间差

python 复制代码
from datetime import datetime, timedelta

now = datetime.now()

# 1. 时间加减(使用timedelta)
tomorrow = now + timedelta(days=1)
last_week = now - timedelta(weeks=1)
two_hours_later = now + timedelta(hours=2)

# 2. 时间比较
if now > tomorrow:
    print("这不可能")
else:
    print("今天还没到明天")

# 3. 计算时间差
start = datetime(2026, 3, 1, 8, 0, 0)
end = datetime(2026, 3, 24, 14, 30, 0)
delta = end - start
print(f"相差天数:{delta.days}")          # 23
print(f"相差秒数:{delta.total_seconds()}") # 2032200.0

2.4 格式化与解析:strftime/strptime的坑

常用格式化指令
指令 含义 示例
%Y 4位数年份 2026
%m 2位数月份 03
%d 2位数日期 24
%H 24小时制小时 14
%M 分钟 30
%S 00
%z UTC偏移量(±HHMM) +0800
%Z 时区名称(缩写) CST
⚠️ 坑点:%z和%Z的兼容性问题
python 复制代码
# 正确:使用%z解析带偏移量的时间字符串
from datetime import datetime

# 带偏移量的字符串
dt_str = "2026-03-24 14:30:00+0800"
# 注意:%z在Python 3.7+支持解析
dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S%z")
print(dt)  # 2026-03-24 14:30:00+08:00
print(dt.tzinfo)  # datetime.timezone(datetime.timedelta(seconds=28800), '+0800')

但是%Z在不同平台上表现不一致,Windows和Linux解析%Z的结果可能不同。建议 :优先使用%z存储偏移量,避免使用%Z

2.5 时区处理:naive vs aware(最易踩坑点)

这是Python时间处理中最容易翻车的概念。

类型 含义 特点
naive datetime 没有时区信息 就像在说"下午3点",但不知道是北京时间还是纽约时间
aware datetime 有时区信息 明确知道是"北京时间下午3点"还是"UTC下午3点"
问题场景:naive datetime直接存储导致跨时区解析错误
python 复制代码
from datetime import datetime

# 错误示范:存储naive datetime
db_time = datetime.now()  # 本地时间,没有时区信息
print(db_time)  # 2026-03-24 14:30:00

# 如果这个时间被另一个时区的用户读取
# 他以为这是UTC时间,就会产生8小时的偏差
解决方案:始终使用aware datetime

Python 3.9+推荐使用zoneinfo模块(内置,无需安装第三方库):

python 复制代码
from datetime import datetime, timezone
from zoneinfo import ZoneInfo

# 创建aware datetime(Python 3.9+)
# 方法1:直接指定UTC
utc_now = datetime.now(timezone.utc)
print(utc_now)  # 2026-03-24 06:30:00+00:00

# 方法2:使用ZoneInfo指定时区
beijing_tz = ZoneInfo("Asia/Shanghai")
beijing_now = datetime.now(beijing_tz)
print(beijing_now)  # 2026-03-24 14:30:00+08:00

# 方法3:从字符串解析带时区的字符串
dt_str = "2026-03-24 14:30:00+08:00"
aware_dt = datetime.fromisoformat(dt_str)
print(aware_dt)  # 2026-03-24 14:30:00+08:00
UTC ↔ 本地时间互转
python 复制代码
from datetime import datetime, timezone
from zoneinfo import ZoneInfo

# 1. UTC转本地时间
utc_time = datetime.now(timezone.utc)
beijing_tz = ZoneInfo("Asia/Shanghai")
beijing_time = utc_time.astimezone(beijing_tz)
print(f"UTC: {utc_time}")          # 2026-03-24 06:30:00+00:00
print(f"北京时间: {beijing_time}")   # 2026-03-24 14:30:00+08:00

# 2. 本地时间转UTC
beijing_time = datetime.now(ZoneInfo("Asia/Shanghai"))
utc_time = beijing_time.astimezone(timezone.utc)
print(f"UTC: {utc_time}")          # 2026-03-24 06:30:00+00:00

2.6 标准库的局限性

问题 说明
API繁琐 创建、转换、格式化都需要多行代码
时区支持弱 tzinfo抽象类需要自己实现,zoneinfo直到3.9才内置
夏令时处理复杂 需要手动处理DST(Daylight Saving Time)切换
人性化输出差 没有内置"2小时前"这样的友好格式
解析能力有限 strptime对非标准格式支持差

这就是为什么我们需要arrowpandas这样的第三方库。


🗡️ 三、Arrow:Python时间处理的"瑞士军刀"(约2000字)

3.1 Arrow的核心优势

arrow是对datetime的现代化封装,旨在提供更简洁、更人性化的API。

优势 说明
API简洁 一行代码完成时区转换、偏移、格式化
时区感知 默认所有时间都是aware的
人性化输出 humanize()一键生成"2小时前"、"3天后"
兼容性好 可与datetime无缝互转
解析能力强 自动识别常见格式

3.2 安装与导入

bash 复制代码
pip install arrow

3.3 核心操作示例

(1) 时间创建
python 复制代码
import arrow

# 获取当前UTC时间(默认aware)
utc_now = arrow.utcnow()
print(utc_now)  # 2026-03-24T06:30:00.123456+00:00

# 获取当前本地时间
local_now = arrow.now()
print(local_now)  # 2026-03-24T14:30:00.123456+08:00

# 从datetime对象创建
from datetime import datetime
dt = datetime(2026, 3, 24, 14, 30)
arrow_dt = arrow.get(dt)
print(arrow_dt)  # 2026-03-24T14:30:00+00:00

# 从字符串创建(自动识别格式)
arrow_parse = arrow.get("2026-03-24 14:30:00")
print(arrow_parse)  # 2026-03-24T14:30:00+00:00
(2) 时区转换
python 复制代码
import arrow

# 创建UTC时间
utc = arrow.utcnow()
print(utc)  # 2026-03-24T06:30:00+00:00

# 转换为北京时间
beijing = utc.to("Asia/Shanghai")
print(beijing)  # 2026-03-24T14:30:00+08:00

# 转换为纽约时间
newyork = utc.to("America/New_York")
print(newyork)  # 2026-03-24T02:30:00-04:00(夏令时)
(3) 时间偏移(shift)
python 复制代码
import arrow

now = arrow.now()

# 加减时间
tomorrow = now.shift(days=1)
yesterday = now.shift(days=-1)
two_hours_later = now.shift(hours=2)
next_week = now.shift(weeks=1)
complex_shift = now.shift(days=2, hours=3, minutes=30)

print(f"现在:{now}")           # 2026-03-24T14:30:00+08:00
print(f"明天:{tomorrow}")       # 2026-03-25T14:30:00+08:00
print(f"两小时后:{two_hours_later}")  # 2026-03-24T16:30:00+08:00
(4) 格式化与解析
python 复制代码
import arrow

now = arrow.now()

# 内置格式
print(now.format())           # 2026-03-24 14:30:00+08:00
print(now.format("YYYY-MM-DD"))  # 2026-03-24
print(now.format("MM/DD/YYYY HH:mm"))  # 03/24/2026 14:30

# 自定义格式
print(now.format("YYYY年MM月DD日 HH时mm分ss秒"))  # 2026年03月24日 14时30分00秒

# 解析字符串(支持多种格式)
parsed = arrow.get("2026-03-24T14:30:00+0800")
print(parsed)  # 2026-03-24T14:30:00+08:00
(5) 人性化输出(humanize)------最受欢迎的功能
python 复制代码
import arrow

# 过去时间
two_hours_ago = arrow.utcnow().shift(hours=-2)
print(two_hours_ago.humanize())  # "2 hours ago"
print(two_hours_ago.humanize(locale="zh_cn"))  # "2小时前"

# 未来时间
tomorrow = arrow.utcnow().shift(days=1)
print(tomorrow.humanize())  # "in a day"
print(tomorrow.humanize(locale="zh_cn"))  # "1天后"

# 支持的语言
# 常见语言代码:zh_cn(简体中文)、en(英文)、ja(日语)、fr(法语)等

效果对比图

📸 此处可配一张对比图,左侧显示datetime计算时间差的繁琐代码,右侧显示arrow.humanize()的一行代码,直观展示简洁性。

3.4 高级特性

(1) 时间范围生成
python 复制代码
import arrow

# 生成时间范围(每5分钟一个点)
start = arrow.get("2026-03-24 00:00:00")
end = arrow.get("2026-03-24 12:00:00")

for dt in arrow.Arrow.range("hour", start, end):
    print(dt.format("HH:mm"))
# 输出:
# 00:00
# 01:00
# 02:00
# ...
# 12:00
(2) 与datetime无缝互转
python 复制代码
import arrow
from datetime import datetime

# Arrow → datetime
arrow_time = arrow.now()
dt = arrow_time.datetime  # 返回datetime对象
print(type(dt))  # <class 'datetime.datetime'>

# datetime → Arrow
dt = datetime.now()
arrow_time = arrow.get(dt)
print(arrow_time)  # 2026-03-24T14:30:00+08:00
(3) 批量时间处理
python 复制代码
import arrow

# 假设有一批UTC时间字符串
utc_strings = [
    "2026-03-24T00:00:00+00:00",
    "2026-03-24T01:00:00+00:00",
    "2026-03-24T02:00:00+00:00"
]

# 批量转换为北京时间
beijing_times = [
    arrow.get(s).to("Asia/Shanghai").format("YYYY-MM-DD HH:mm")
    for s in utc_strings
]
print(beijing_times)
# ['2026-03-24 08:00', '2026-03-24 09:00', '2026-03-24 10:00']

3.5 Arrow适用场景

场景 推荐度
Web应用中的时间处理 ⭐⭐⭐⭐⭐
日志记录(人性化输出) ⭐⭐⭐⭐⭐
API时间格式转换 ⭐⭐⭐⭐
需要时区感知的中小项目 ⭐⭐⭐⭐⭐
不需要安装pandas的场景 ⭐⭐⭐⭐⭐

📊 四、Pandas:时间序列处理神器(约2000字)

4.1 为什么Pandas适合时间序列?

优势 说明
向量化操作 对整列时间数据进行操作,比循环快100倍+
高性能 底层用C语言实现,处理百万级数据无压力
丰富的时间工具 重采样、时区转换、缺失填充一应俱全
与数据分析无缝集成 可直接配合matplotlib绘图

4.2 安装与导入

bash 复制代码
pip install pandas matplotlib
python 复制代码
import pandas as pd
import numpy as np

4.3 核心功能详解

(1) 日期范围生成(date_range)
python 复制代码
import pandas as pd

# 生成连续日期
dates = pd.date_range(start="2026-03-01", end="2026-03-31", freq="D")
print(dates)  # DatetimeIndex(['2026-03-01', '2026-03-02', ...], dtype='datetime64[ns]', freq='D')

# 生成指定数量的日期
dates = pd.date_range(start="2026-01-01", periods=10, freq="M")
print(dates)  # 按月生成

# 常见频率(freq参数)
# 'D': 天
# 'H': 小时
# 'T'或'min': 分钟
# 'S': 秒
# 'W': 周
# 'M': 月末
# 'Q': 季度末
# 'Y': 年末

# 生成每5分钟一个点
minute_dates = pd.date_range("2026-03-24 00:00", "2026-03-24 23:55", freq="5T")
print(f"生成了{len(minute_dates)}个时间点")  # 288个
(2) 时间索引(DatetimeIndex)
python 复制代码
import pandas as pd
import numpy as np

# 创建示例数据
dates = pd.date_range("2026-03-01", periods=100, freq="D")
data = np.random.randn(100)  # 随机数据
df = pd.DataFrame({"value": data}, index=dates)

print(df.head())
#              value
# 2026-03-01  0.123
# 2026-03-02 -0.456
# ... ...

# 快速筛选(切片)
# 筛选3月的数据
march_data = df["2026-03"]
print(march_data)

# 筛选3月1日到3月15日
range_data = df["2026-03-01":"2026-03-15"]

# 筛选特定日期
specific = df.loc["2026-03-10"]
(3) 重采样(resample)------核心功能

重采样是将时间序列从一种频率转换为另一种频率。

python 复制代码
import pandas as pd
import numpy as np

# 生成小时级数据(3月份,每小时一个点)
dates = pd.date_range("2026-03-01", "2026-03-31 23:00", freq="H")
data = np.random.randn(len(dates))
df = pd.DataFrame({"value": data}, index=dates)

# 按天汇总(降采样)
daily = df.resample("D").mean()
print(daily.head())
#              value
# 2026-03-01  0.023
# 2026-03-02 -0.112
# ...

# 按周汇总
weekly = df.resample("W").sum()

# 按小时汇总(升采样,需要填充)
hourly = df.resample("15T").ffill()  # 前向填充

# 支持多种聚合函数
agg_daily = df.resample("D").agg(["mean", "max", "min", "std"])
print(agg_daily.head())

重采样示意图

📸 此处可配一张图,展示原始数据(小时级)经过resample("D")后如何聚合为天级数据,直观展示降采样过程。

(4) 时区处理(tz_localize / tz_convert)
python 复制代码
import pandas as pd
import numpy as np

# 创建naive时间索引
dates = pd.date_range("2026-03-01", periods=10, freq="D")
df = pd.DataFrame({"value": np.random.randn(10)}, index=dates)

# 1. 本地化(为naive时间添加时区)
# 假设原始数据是UTC时间
df_utc = df.tz_localize("UTC")
print(df_utc.index)
# DatetimeIndex(['2026-03-01 00:00:00+00:00', ...], dtype='datetime64[ns, UTC]', freq='D')

# 2. 时区转换(UTC → 北京时间)
df_beijing = df_utc.tz_convert("Asia/Shanghai")
print(df_beijing.index)
# DatetimeIndex(['2026-03-01 08:00:00+08:00', ...], dtype='datetime64[ns, Asia/Shanghai]', freq='D')
(5) 缺失时间填充
python 复制代码
import pandas as pd
import numpy as np

# 创建有缺失的时间序列
dates = pd.date_range("2026-03-01", periods=10, freq="D")
data = [1, 2, np.nan, 4, 5, np.nan, 7, 8, 9, 10]
df = pd.DataFrame({"value": data}, index=dates)

# 前向填充
df_ffill = df.fillna(method="ffill")

# 后向填充
df_bfill = df.fillna(method="bfill")

# 插值(线性)
df_interp = df.interpolate()

4.4 实战案例

案例1:分析用户行为时间分布(按小时统计)
python 复制代码
import pandas as pd
import numpy as np

# 模拟用户行为数据(10000条随机时间)
np.random.seed(42)
timestamps = pd.date_range("2026-03-01", periods=10000, freq="15T")  # 15分钟一个点
# 随机打乱顺序
timestamps = np.random.permutation(timestamps)

df = pd.DataFrame({"user_id": np.random.randint(1, 1000, 10000),
                   "action": np.random.choice(["click", "purchase", "view"], 10000),
                   "timestamp": timestamps})

# 按小时统计行为数量
df["hour"] = df["timestamp"].dt.hour
hourly_stats = df.groupby("hour").size()
print(hourly_stats)
# hour
# 0     417
# 1     389
# 2     412
# ... ...

# 按小时+行为类型统计
hourly_action = df.groupby(["hour", "action"]).size().unstack()
print(hourly_action)
案例2:处理跨时区的日志数据(统一转为UTC)
python 复制代码
import pandas as pd

# 模拟不同时区的日志数据
data = {
    "timestamp": [
        "2026-03-24 08:00:00+0800",  # 北京时间
        "2026-03-24 07:00:00+0900",  # 东京时间
        "2026-03-24 06:00:00+0000",  # UTC时间
        "2026-03-23 22:00:00-0400"   # 纽约时间
    ],
    "event": ["login", "purchase", "logout", "login"]
}
df = pd.DataFrame(data)

# 解析带时区的时间字符串
df["timestamp"] = pd.to_datetime(df["timestamp"], format="%Y-%m-%d %H:%M:%S%z")
print(df["timestamp"])
# 0   2026-03-24 08:00:00+08:00
# 1   2026-03-24 07:00:00+09:00
# 2   2026-03-24 06:00:00+00:00
# 3   2026-03-23 22:00:00-04:00

# 统一转换为UTC
df["timestamp_utc"] = df["timestamp"].dt.tz_convert("UTC")
print(df["timestamp_utc"])
# 0   2026-03-24 00:00:00+00:00
# 1   2026-03-23 22:00:00+00:00
# 2   2026-03-24 06:00:00+00:00
# 3   2026-03-24 02:00:00+00:00
案例3:时间序列可视化
python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

# 生成模拟股票价格数据
dates = pd.date_range("2026-01-01", periods=365, freq="D")
prices = 100 + np.cumsum(np.random.randn(365) * 0.5)  # 随机游走

df = pd.DataFrame({"price": prices}, index=dates)

# 绘制走势图
plt.figure(figsize=(12, 6))
plt.plot(df.index, df["price"], linewidth=1)
plt.title("Stock Price Trend - 2026")
plt.xlabel("Date")
plt.ylabel("Price")
plt.grid(True, alpha=0.3)
plt.show()

# 按月绘制箱线图
df["month"] = df.index.month
df.boxplot(column="price", by="month", figsize=(12, 6))
plt.title("Monthly Price Distribution")
plt.suptitle("")  # 去掉默认的suptitle
plt.show()

可视化效果图

📸 此处可配两张图:一张是时间序列折线图,一张是月度箱线图,展示pandas+matplotlib的强大可视化能力。


⚠️ 五、工程落地避坑指南(约500字)

坑1:naive datetime直接存储,导致跨时区解析错误

错误代码

python 复制代码
# 错误:存储naive datetime
db.save_time(datetime.now())  # 本地时间,无时区信息

正确做法

python 复制代码
# 正确:存储aware datetime(统一UTC)
from datetime import datetime, timezone
db.save_time(datetime.now(timezone.utc))

坑2:混用pytz和zoneinfo,导致时区偏移错误

pytz(Python 3.9前)和zoneinfo(Python 3.9+)的时区对象不完全兼容。

错误:混用时区对象

python 复制代码
from pytz import timezone as pytz_tz
from zoneinfo import ZoneInfo

# 错误:混用
dt = datetime.now(ZoneInfo("Asia/Shanghai"))
dt_ny = dt.astimezone(pytz_tz("America/New_York"))  # 可能报错

正确做法 :统一使用一种,Python 3.9+推荐zoneinfo

坑3:pandas读取CSV时未解析时间列

错误:未指定parse_dates,时间列被当作字符串处理

python 复制代码
df = pd.read_csv("data.csv")
# df["timestamp"] 是字符串,无法使用dt访问器

正确做法

python 复制代码
df = pd.read_csv("data.csv", parse_dates=["timestamp"])
# 或读取后再转换
df["timestamp"] = pd.to_datetime(df["timestamp"])

坑4:Arrow的本地化输出未指定locale,导致中文乱码

错误

python 复制代码
import arrow
print(arrow.now().humanize())  # "1 hour ago" 英文

正确做法

python 复制代码
print(arrow.now().humanize(locale="zh_cn"))  # "1小时前"

🎯 六、第三方库对比与选型(约500字)

适用场景 优点 缺点
datetime 基础场景,无依赖 标准库,零依赖 API繁琐,时区处理弱
arrow 中小项目,追求开发效率 API简洁,人性化输出 性能不如pandas
pandas 大数据/时间序列分析 向量化,高性能 依赖重,学习曲线陡
Pendulum 更强的时区处理 兼容Arrow API,DST处理强 社区比Arrow小
python-dateutil 扩展datetime功能 relativedelta支持月/年偏移 API不如Arrow优雅

选型建议

复制代码
if 场景 == "简单的时间格式化":
    使用 datetime
elif 场景 == "Web应用,需要人性化输出和时区转换":
    使用 arrow
elif 场景 == "百万级数据分析,重采样/聚合":
    使用 pandas
else:
    # 复杂时区处理,需要精确控制夏令时
    使用 Pendulum

📝 七、总结与预告(约300字)

Python时间处理核心原则

  1. 优先使用aware datetime:所有时间对象都带时区信息,避免歧义
  2. 统一存储UTC:数据库、日志、API传输都存UTC时间
  3. 展示层转本地时间:只在展示时转换为用户时区
  4. 善用第三方库:arrow提升开发效率,pandas应对大数据场景

快速对照表

操作 datetime arrow pandas
获取当前UTC datetime.now(timezone.utc) arrow.utcnow() pd.Timestamp.now(tz="UTC")
时区转换 .astimezone() .to() .tz_convert()
人性化输出 需自行计算 .humanize() 不支持
重采样 不支持 不支持 .resample()
批量处理 循环 列表推导 向量化

下一篇预告

下一篇将讲解《JavaScript时间处理:从Date到Temporal,告别所有坑》,带你了解JS时间处理的演进史,从Date的坑到Temporal的未来,敬请关注!


如果觉得本文对你有帮助,欢迎点赞、收藏、关注三连,后续更多Python实战干货!

相关推荐
张张123y几秒前
AI大模型应用面试:深度学习知识点汇总与面试指导
人工智能·深度学习·面试
rosmis1 分钟前
复杂工程拆解:自顶向下设计,自底向上实现
人工智能·python·机器人·自动化·自动驾驶·硬件工程·制造
njidf2 分钟前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
郝学胜-神的一滴2 分钟前
深入理解Python生成器:从基础到斐波那契实战
开发语言·前端·python·程序人生
hughnz6 分钟前
斯伦贝谢成功的创新策略
人工智能·能源·钻井
2301_764441337 分钟前
python与Streamlit构建的旅游行业数据分析Dashboard项目
python·数据分析·旅游
问水っ7 分钟前
Qt Creator快速入门 第三版 第6章 事件系统
开发语言·qt
cm6543208 分钟前
C++中的空对象模式
开发语言·c++·算法
m0_612591978 分钟前
尚航科技 IDC 服务综合实力对比分析
人工智能·科技
吴声子夜歌8 分钟前
JavaScript——异常处理
开发语言·javascript·ecmascript