如何轻松地将GQLQuery的日期字段格式化为另一个时区?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何轻松地将GQLQuery的日期字段格式化为另一个时区?相关的知识,希望对你有一定的参考价值。

[编辑]而且,我应该补充一下,最优雅的?我想(但不知道如何)我可以先在python代码中循环遍历结果并格式化每个日期,但我宁愿只循环一次...... [\ Edit]

在我的案例中英国夏令时(刚刚开始)。

目前,我最顶层的直接格式化日期是正确的,但结果各行中的日期仍然是UTC(落后1小时)。示例输出是一个模板化的页面,看起来像这样(在这种情况下,datetime.now返回的UTC为12:42):

现在时间:2012年4月5日13:42

2012-04-05 13:10:00事件234

2012-04-05 13:10:00事件235

2012-04-05 13:10:00事件236

...

这就是我正在做的......

from pytz.gae import pytz  # N.B. Using the recommended version of pytz
from datetime import datetime

# Use datetime now (in UTC) to select upcoming events (also stored in UTC)

nowat = datetime.now()
upcoming_events = db.GqlQuery(
  "SELECT * FROM Event WHERE eventdatetime >= :1",nowat)

# Convert time to BST and print to string…

utc = pytz.timezone('UTC')
nowat = utc.localize(nowat)
bst = pytz.timezone('Europe/London')
timenow = nowat.astimezone(bst).strftime("%H:%M on %d %B, %Y")

# Pass results to template for formating… (this is the Django engine)

template_values = {
        'time' : timenow,
        'events' : upcoming_events
 }
path = os.path.join(os.path.dirname(__file__),'html','today.html')
self.response.out.write(template.render(path,template_values))

我认为可能有一些魔法我可以类似地应用于模板代码 - 但似乎只有date built-in允许格式化日期时间而不是从UTC转换。

模板是:

<html>
  <head>
    <link type="text/css" rel="stylesheet" href="/css/main.css" />
  </head>
  <body>
    <p>Time is now: {{ time }}</p>
    <table>
      {% for event in events %} 
        <tr>
          <td> {{ event.eventdatetime }} </td>
          <td> {{ event.name }} </td>
        </tr>
      {% endfor %}  
    </table>
  </body>
</html>
答案

使用django的模板引擎,你可以使用Time zone aware output in templates

文档中的示例用法:

{% load tz %}

{% timezone "Europe/Paris" %}
    Paris time: {{ value }}
{% endtimezone %}

{% timezone None %}
    Server time: {{ value }}
{% endtimezone %}

以上是关于如何轻松地将GQLQuery的日期字段格式化为另一个时区?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 bigint 字段格式化为 Postgresql 中的日期?

如何使用 Freemarker 将 CRM“仅日期”字段格式化为字符串?

jQuery UI Datepicker 将备用字段填充并格式化为 MySQL 日期

SWIFT:从文本字段格式化为日期不起作用

Django 模板中的日期/时间格式

Oracle数据库中如何将字符串格式化为日期