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

如何在Flask中将字符串转换为Python对象(时区场景)

问题:从JSON配置文件传入timezone.utc是否可行?

原有代码:

from datetime import timezone
DEFAULT_TZ = timezone.utc

我希望改成从JSON配置文件读取timezone.utc作为输入变量,使用的代码如下:

from datetime import timezone

app.config.from_file(filename="config.json", load=json.load)
DEFAULT_TZ = app.config['DEFAULT_TIMEZONE']

其中config.json的内容为:

{
  "DEFAULT_TIMEZONE": "timezone.utc"
}

请问这种实现方式是否可行?


回答

这种方式不可行。因为JSON里存储的是字符串"timezone.utc",而你实际需要的是datetime.timezone.utc这个时区对象,直接读取赋值的话,DEFAULT_TZ只是个普通字符串,无法作为时区对象使用。

下面是两种可行的解决办法:

方法一:字符串映射到时区对象

在代码中建立配置字符串与实际时区对象的映射关系:

from datetime import timezone
import json

app.config.from_file(filename="config.json", load=json.load)
# 配置字符串和对应时区对象的映射表
tz_mapping = {
    "timezone.utc": timezone.utc
    # 后续需要添加其他时区时,直接在这里扩展即可
}
DEFAULT_TZ = tz_mapping[app.config['DEFAULT_TIMEZONE']]

方法二:使用标准时区标识符(更通用)

在JSON中存储标准的时区标识符(比如"UTC"),然后用Python自带的时区库解析:

# Python 3.9及以上版本可使用zoneinfo
from zoneinfo import ZoneInfo
import json

app.config.from_file(filename="config.json", load=json.load)
DEFAULT_TZ = ZoneInfo(app.config['DEFAULT_TIMEZONE'])

对应的config.json修改为:

{
  "DEFAULT_TIMEZONE": "UTC"
}

这种方式支持更多时区类型,扩展性更强。


内容的提问来源于stack exchange,提问作者A. Gardner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:02:15