Flask + Jinja:将UTC转换为本地时区

2 投票
2 回答
5144 浏览
提问于 2025-04-18 11:17

我有一个Flask应用,它会把用户的时区(来自pytz.common_timezones)存储在数据库里。

我在数据库中用UTC时间戳来保存记录。

我想根据用户的时区来显示这些记录。

那么,最好的做法是:

  1. 逐条记录地转换时区,然后再把它们传给render_template吗?

    --还是--

  2. 在我的视图中定义一个宏,在模板里直接进行这个转换吗?

有没有什么好的方法来把一个不带时区的时间转换为本地时区呢?

2 个回答

1

在我看来,第二种选择更好,因为服务器的代码不需要知道每个客户端的时区信息。而且,像 Flask-Moment 这样的Flask扩展可以让这个过程变得简单很多。

0

我觉得你这里有两个不同的问题。真正的问题是关于如何更好地处理你的模板——这可以应用于任何值的处理。这个我就不多说了,让其他人来回答吧。

关于第二个问题:

有没有什么好的方法可以把一个不带时区的时间转换成本地时区的时间?

这个问题有点不太对劲。在Python中,“naive”指的是“不知道时区”,所以其实并不存在什么“naive timezone”。

如果你是想把一个不带时区的datetime转换成带时区的datetime,那么最好的建议就是一定要使用localize这个函数,具体可以参考pytz的文档。不要试着自己去给tzinfo属性赋值。

撰写回答