Oma*_*maL 7 python datetime openerp
在OpenERP中,当我尝试打印当前日期和时间时,它始终打印"UTC"时间.但我希望在用户时区得到时间.每个用户都有不同的时区.For example 'CST6CDT','美国/太平洋'或'亚洲/加尔各答'.所以我需要花时间在用户时区,以便我可以在报告中显示正确的日期时间.我试图在datatime模块中使用localize()和replace()函数来更改时区.但我没有得到正确的输出.
Oma*_*maL 11
得到它了.
from datetime import datetime
from pytz import timezone
fmt = "%Y-%m-%d %H:%M:%S"
# Current time in UTC
now_utc = datetime.now(timezone('UTC'))
print now_utc.strftime(fmt)
# Convert to US/Pacific time zone
now_pacific = now_utc.astimezone(timezone('US/Pacific'))
print now_pacific.strftime(fmt)
# Convert to Europe/Berlin time zone
now_berlin = now_pacific.astimezone(timezone('Europe/Berlin'))
print now_berlin.strftime(fmt)
Run Code Online (Sandbox Code Playgroud)
礼貌:http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
从 OpenERP 6.1 开始,服务器端(和模块中)发生的所有 Python 操作的时区都被强制为 UTC。这是一个在不同地方[1] 中解释的设计决策。用户时区中日期时间值的呈现旨在专门在客户端完成。
很少有在服务器端使用用户时区而不是 UTC 有意义的情况,但确实在报告中打印日期时间值就是其中之一,因为客户端将没有机会转换内容结果报告。
这就是报表引擎为此提供了一个实用方法的原因:formatLang()如果您使用 datetime 值调用它,则在报表上下文中提供的方法(至少基于 RML 的方法)将根据用户的时区格式化日期并使用date_time=True(它使用tz在 RPC 调用中传递的上下文变量并基于用户的时区首选项)您可以在官方插件中找到如何使用它的示例,例如在交付模块 (l.171) 中。
看一看在执行的formatLang(),如果你想知道它是如何实际执行转换。
[1]:请参阅 OpenERP 6.1 发行说明、另一个问题以及关于错误 918257或错误 925361 的评论 #4 。