【问题标题】:How to test datetime conversion with pytz and tzlocal?如何使用 pytz 和 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 获取系统的时区,而不是客户端的。

标签: python datetime flask jinja2 pytz


【解决方案1】:

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

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

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

【讨论】:

  • 这很糟糕,但我想它可以简化事情。我将在任何地方都使用 UTC,并为用户提供更改它的选项。
猜你喜欢
  • 2015-02-16
  • 2010-12-28
  • 1970-01-01
  • 2013-09-03
  • 2018-07-05
  • 1970-01-01
  • 2010-11-25
  • 2017-09-30
相关资源
最近更新 更多