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

Posted

技术标签:

【中文标题】如何轻松地将 GQLQuery 的日期字段格式化为另一个时区?【英文标题】:How can I easily format the date fields of my GQLQuery to another Timezone? 【发布时间】:2012-04-19 05:20:28 【问题描述】:

[编辑] 而且,我应该最优雅地补充一下?我想(但不确定如何)我可以先循环遍历 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>

【问题讨论】:

【参考方案1】:

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

文档中的示例用法:

% load tz %

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

% timezone None %
    Server time:  value 
% endtimezone %

【讨论】:

这看起来很棒 - 但不幸的是我尝试过并得到了这个:TemplateSyntaxError: 'tz' is not a valid tag library: Could not load template library from django.templatetags.tz, No module named tz - 所以我不确定 GAE 提供了哪些模块...... 如果不包括在内,您可以获取该标签的 django 源代码并将其粘贴到您自己的模板标签中,如下所述:4.flowsnake.org/archives/459 谢谢。那行得通。破解“tz”标签代码有点痛苦。 我在 GAE 中遇到了相同的 TemplateSyntaxError。不幸的是,该链接不再有效,我找不到任何解释如何执行此操作的资源。您能否解释一下,或者让我参考解释如何添加 tz 模块的资源?

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

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

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

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

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

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

如何在没有不必要的十进制 0 的情况下很好地将浮点数格式化为字符串