原生 datetime 语法又长又绕、时区混乱、加减时间超级麻烦,每次写时间逻辑都要翻文档。今天给大家推荐一个公认最好用的 Python 时间库:arrow一句话替代原生 datetime,代码极简、可读性极强。------------------------------------------------------------------------✨ arrow 库简介
Arrow 是一个轻量、优雅、开箱即用的 Python 时间处理开源库。专门用来解决原生 datetime 语法繁琐、易用性差、时区坑多的问题。核心优势
适用场景
⚙️ 安装方式
pip install arrow
pip install arrow -i https://pypi.tuna.tsinghua.edu.cn/simple
💻 高频实战代码
1、获取当前时间并格式化
import arrow# 获取当前时间并格式化now = arrow.now().format("YYYY-MM-DD HH:mm:ss")print("当前时间:", now)2、时间快速加减
import arrow# 3天前day_ago = arrow.now().shift(days=-3).format("YYYY-MM-DD")# 2小时后hour_later = arrow.now().shift(hours=2).format("HH:mm:ss")print("三天前:", day_ago)print("两小时后:", hour_later)3、时间戳与时间互转
import arrow# 时间转时间戳:timestamp() 要加括号调用timestamp = arrow.now().timestamp()print("当前时间戳:", timestamp)# 时间戳转回标准时间time_str = arrow.get(timestamp).format("YYYY-MM-DD HH:mm:ss")print("时间戳还原:", time_str)📌 代码简单说明
import arrown = arrow.now() # 获取当前时间print(n)print(n.format("YYYY-MM-DD HH:mm:ss")) # 格式化时间print(n.shift(hours=2).format("YYYY-MM-DD HH:mm:ss")) # 加2小时print(n.shift(days=-3).format("YYYY-MM-DD HH:mm:ss")) # 减3天
import arrow# 1. 获取时间now = arrow.now() # 当前本地时间utc = arrow.now("UTC") # UTC时间t = arrow.get("2026-07-09 16:30")# 字符串转时间对象print("本地当前时间:", now)print("UTC时间:", utc)print("字符串转时间对象:", t)# 2. 格式化输出fmt1 = now.format("YYYY-MM-DD HH:mm:ss") # 标准时分秒fmt2 = now.format("YYYYMMDD") # 纯日期数字print("标准格式化:", fmt1)print("纯数字日期:", fmt2)# 3. 时间偏移 shiftadd1h = now.shift(hours=1) # +1小时sub5m = now.shift(minutes=-5) # -5分钟yesterday = now.shift(days=-1) # 昨天next_month = now.shift(months=1) # 下月print("1小时后:", add1h.format("YYYY-MM-DD HH:mm:ss"))print("5分钟前:", sub5m.format("YYYY-MM-DD HH:mm:ss"))print("昨天:", yesterday.format("YYYY-MM-DD HH:mm:ss"))print("下个月:", next_month.format("YYYY-MM-DD HH:mm:ss"))# 4. 时间戳互转(修复低版本无timestamp_ms报错)ts = now.timestamp() # 秒时间戳ms = int(now.timestamp() * 1000) # 兼容写法,毫秒时间戳ts_dt = arrow.get(ts) # 秒戳转时间ms_dt = arrow.get(ms / 1000) # 毫秒戳转时间print("秒时间戳:", ts)print("毫秒时间戳:", ms)print("秒戳还原时间:", ts_dt.format("YYYY-MM-DD HH:mm:ss"))print("毫秒戳还原时间:", ms_dt.format("YYYY-MM-DD HH:mm:ss"))# 5. 起止时间快速获取today_zero = now.floor("day") # 今日0点next_day_zero = now.ceil("day") # 次日0点current_hour = now.floor("hour")# 当前小时整点print("今日零点:", today_zero.format("YYYY-MM-DD HH:mm:ss"))print("次日零点:", next_day_zero.format("YYYY-MM-DD HH:mm:ss"))print("当前整点:", current_hour.format("YYYY-MM-DD HH:mm:ss"))# 6. 时间对比t1 = arrow.get("2026-01-01")is_later = now > t1 # 判断时间先后diff_sec = (t1 - now).total_seconds() # 相差总秒数print("当前是否晚于2026-01-01:", is_later)print("时间差值(秒):", diff_sec)# 7. 替换指定字段eight_clock = now.replace(hour=8, minute=0) # 修改为当日8点整print("当日8点:", eight_clock.format("YYYY-MM-DD HH:mm:ss"))
⚠️ 常见踩坑提醒
需要 UTC 时间可使用:arrow.utcnow()安装报错可先卸载重装:pip uninstall arrow✅ 总结
如果你平时写 Python 经常需要处理时间,强烈建议直接用 arrow 替代原生 datetime。代码更少、逻辑更清晰、几乎没有时区坑,不管是写脚本还是做项目都极其舒服。持续更新 Python 实用库|自动化脚本|高效开发技巧