所以我想要在当地时间为用户显示日期时间对象。
在这里使用已回答的问题,我想出了一个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()实际上抓住用户的本地时区而不是服务器的时区。
我的问题是:如何测试这是否正常?
答案 0 :(得分:3)
get_localzone()
将始终返回运行应用程序的服务器的本地时区。
请求的HTTP标头中没有任何内容可以告诉您用户的时区。相反,接近这个的标准方法是要求用户告诉你他们的首选时区。
有关此问题的详细讨论,请参阅Determine a User's Timezone。