You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复树莓派上Pytz出现的未知时区错误?

解决树莓派Pi3上Pytz UnknownTimeZoneError: 'SystemV/EST5EDT'问题

我之前在树莓派3上折腾Flask定时任务的时候也碰到过几乎一模一样的问题!当时也是初始化BackgroundScheduler()的时候直接炸了,报的错和你完全一致,折腾了好一会儿才搞定,给你分享几个靠谱的解决办法:

1. 问题根源:系统时区用了Pytz不兼容的格式

树莓派默认的时区设置里,有些选项是SystemV格式的(比如你碰到的EST5EDT),而Pytz只认IANA标准时区(像Asia/Shanghai、America/New_York这种),所以当BackgroundScheduler自动读取系统时区时就会触发错误。

具体解决方法

方法一:修改树莓派系统时区(最彻底)

直接把系统时区换成Pytz支持的IANA格式:

  • 用图形化配置工具:
    运行sudo raspi-config,依次选择Localisation Options -> Change Timezone,然后选你所在的地区和城市(比如Asia -> Shanghai),不要选SystemV开头的选项。
  • 或者用命令行快速设置:
    sudo timedatectl set-timezone Asia/Shanghai
    
    把Asia/Shanghai换成你需要的时区就行。
  • 验证:运行timedatectl,看输出里的Time zone是不是IANA格式的,比如Asia/Shanghai (CST, +0800)。

方法二:强制给BackgroundScheduler指定时区

如果不想改系统时区,初始化调度器的时候直接指定一个Pytz能识别的时区就行:

from pytz import timezone
from apscheduler.schedulers.background import BackgroundScheduler

# 示例:指定上海时区
scheduler = BackgroundScheduler(timezone=timezone('Asia/Shanghai'))

# 或者用UTC时区(更稳妥,适合跨时区场景)
# scheduler = BackgroundScheduler(timezone='UTC')

方法三:更新Pytz版本

树莓派自带的Python3.4可能搭配的Pytz版本比较旧,时区数据不全,更新一下:
先激活你的虚拟环境:

source /home/pi/Documents/flask_projects/unexpected_two/venv/bin/activate

然后更新Pytz:

pip install --upgrade pytz

额外排查步骤

  • 先确认系统当前的时区:
    python -c "import os; print(os.environ.get('TZ'))"
    
    如果输出是SystemV/EST5EDT,那就是系统时区的问题无疑。
  • 检查Pytz支持的时区列表:
    python -c "import pytz; print('\n'.join(pytz.all_timezones))"
    
    看看你想用的时区在不在里面,不在的话就需要更新Pytz或者换标准时区。

我当时是用方法一搞定的,改完系统时区后直接就不报错了,你可以先试试这个!

内容的提问来源于stack exchange,提问作者mishap_n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:29:48