如何使用 pytz 和 tzlocal 测试日期时间转换?

Posted

技术标签:

【中文标题】如何使用 pytz 和 tzlocal 测试日期时间转换?【英文标题】:How to test datetime conversion with pytz and tzlocal? 【发布时间】:2015-01-01 02:05:53 【问题描述】:

所以我有想要在本地时间向用户显示的日期时间对象。

使用此处已回答的问题,我想出了一个 jinja 过滤器来完成此操作:

from tzlocal import get_localzone
import pytz

def local_datetime(utc_dt):
    local_tz = get_localzone()
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)
    return local_dt.strftime('%m/%d/%y @ %I:%M %p')

app.jinja_env.filters['local_dt'] = local_datetime

 user.last_login_at|local_dt  # in my template

我的想法是它会在每次有人查看页面时运行(因此是过滤器),以便它始终显示在用户的本地时区中。

它显示在我的开发机器上,但我想确保 get_localzone() 实际上是在抓取用户的本地时区,而不是总是在服务器上。

我的问题是:如何测试这是否正常工作?

【问题讨论】:

我相信get_localtimezone 获取系统的时区,而不是客户端的。 【参考方案1】:

get_localzone() 将始终返回运行您的应用程序的服务器的本地时区。

请求的 HTTP 标头中没有任何内容可以告诉您用户的时区。相反,解决这个问题的标准方法是让用户告诉你他们喜欢的时区。

有关此问题的更多讨论,请参阅Determine a User's Timezone。

【讨论】:

这很糟糕,但我想它可以简化事情。我将在任何地方都使用 UTC,并为用户提供更改它的选项。

以上是关于如何使用 pytz 和 tzlocal 测试日期时间转换?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pytz 进行日期时间和时区转换 - 令人兴奋的行为

使用 pytz 进行日期时间和时区转换 - 令人兴奋的行为

使用 pytz 进行日期时间时区转换

python 使用`pytz`将时间和日期对话转换为其他时区。

pytz 和 'America/Chicago' 的错误感知日期时间 [重复]

使用 pytz 将日期时间从一个时区转换为另一个时区