烧瓶/神社模板中的UTC到本地时区 [英] UTC to local timezone in a flask/jinja template

查看:48
本文介绍了烧瓶/神社模板中的UTC到本地时区的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这已经被问过了,我仍然在拔头发,试图弄清楚这一点.我已经尝试过pytz,dateutil和现在flask_moment.在将MySQL表日期时间(UTC)转换为本地时间(特别是UTC-05:00(EST))在jinja2模板中显示时,仍然存在问题.

I know this has been asked before, and I'm still pulling my hair out trying to figure this one out. I've tried pytz, dateutil, and now flask_moment. Still having problems converting a MySQL table datetime, which is UTC, to display in the jinja2 template as local time, specifically UTC - 05:00 (EST).

我的jinja2 for循环如下:

My jinja2 for loop looks like this:

{% for data in items %}
    ...
   <td>{{data.loggedInBy}}</td>
   <td>{{data.timeIn.strftime('%I:%M %p')}}</td>
    ...
{% endfor %}

我是python/flask/jinja的新手,所以请放轻松.对于像我这样的菜鸟来说,文档非常令人困惑.有人可以帮我引导我的MySQL表显示本地时区的时间吗?

I'm new to python/flask/jinja, so go easy on me, please. The documentation is pretty confusing for a noob such as myself. Can someone please walk me through getting my MySQL table to display the times in local timezone?

我觉得这已经很接近了,但是却遇到了错误.在 init .py中,我有:

I feel like this is close, but getting errors with it. In init.py, I had:

from pytz import timezone

def datetimefilter(value, format='%I:%M %p'):
    tz = timezone('US/Eastern')
    dt = value
    local_dt = tz.localize(dt)
    local_dt.replace(hour=local_dt.hour + int(local_dt.utcoffset().total_seconds() / 3600))
    return local_dt.strftime(format)

flask_app.jinja_env.filters['datetimefilter'] = datetimefilter

jinja template had:

{% for data in items %}
...
<td>{{data.loggedInBy}}</td>
<td>{{data.timeIn | datetimefilter }}</td>
...
{% endfor %}

但这给了我"ValueError:小时必须在0..23之间" 从第

But this was giving me "ValueError: hour must be in 0..23" From line:

local_dt.replace(hour=local_dt.hour + int(local_dt.utcoffset().total_seconds() / 3600))

提前谢谢!

推荐答案

在这种情况下,这最终对我有用,我仍然不确定在DST期间是否会提供错误的信息,但是我们会看到的.

This is what ended up working for me, in this particular case, and I'm still not sure if it is going to give incorrect info during DST, but we'll see.

import pytz
from pytz import timezone
import tzlocal 

def datetimefilter(value, format="%I:%M %p"):
    tz = pytz.timezone('US/Eastern') # timezone you want to convert to from UTC
    utc = pytz.timezone('UTC')  
    value = utc.localize(value, is_dst=None).astimezone(pytz.utc)
    local_dt = value.astimezone(tz)
    return local_dt.strftime(format)

flask_app.jinja_env.filters['datetimefilter'] = datetimefilter

然后我的jinja2模板如下:

Then my jinja2 template looks like:

{% for data in items %}
...
<td>{{data.loggedInBy}}</td>
<td>{{data.timeIn | datetimefilter }}</td>
...
{% endfor %}

如果有任何改进的方法,我欢迎提出建议,但是到目前为止,这是我发现可行的唯一方法.

If there's any way to improve on this, I'm open to suggestions, but so far, this is the only way that I've found that works.

这篇关于烧瓶/神社模板中的UTC到本地时区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆