2014-11-05 21 views
1

所以我有datetime对象,我想在当地时间为用户显示。如何用pytz和tzlocal测试日期时间转换?

使用在这里回答问题,我想出了一个神社过滤器来实现:

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()实际上抓住用户的本地时区,而不是服务器的。

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

+3

我相信'get_localtimezone'获取系统的时区,而不是客户端。 – dirn 2014-11-05 01:12:05

回答

3

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

请求的HTTP标头中没有任何内容可以告诉您用户的时区。相反,接近这个标准的方法是要求用户告诉你他们的首选时区。

请参阅Determine a User's Timezone了解更多关于此的讨论。

+1

那么这是一个无赖,但我想它简化了事情。我将在每个地方使用UTC,并为用户提供改变它的选项。 – Chockomonkey 2014-11-05 17:08:03

相关问题