OpenERP 6.1 日期时间格式化

1 投票
2 回答
2560 浏览
提问于 2025-04-17 15:26

为什么

o.create_order.strftime("%d %B %Y")

time.strftime("%d %B %Y")

返回日期“2013年2月10日”时却什么都不返回呢?

o.create_order 是一个时间戳,根据 PostgreSQL 的说法。它在 openErp 销售订单的其他信息标签中显示为“30/11/2012 09:38:34”。在查询数据库时,它存储为“2012-11-30 08:38:34.272”。所以我本来期待看到“2012年11月30日”,但却什么都没有。难道我理解错了语法?

我在 Python 3.3 中测试了这个:

>>> d1=datetime.datetime.today()
>>> print(d1.strftime("%d %B %Y"))
10 february 2013 

我该如何在 OpenOffice Writer 中让它工作呢?

顺便问一下,怎么才能显示“February”而不是“february”呢?

2 个回答

0

这是因为 o.create_order 返回的是一个字符串。所以你首先需要把这个字符串格式的日期转换成日期时间格式,然后你可以再把它转换成你想要的任何字符串格式。

试试这个:

#将字符串转换为日期时间格式。 dt1 = datetime.strptime(o.create_order,"%Y-%m-%d %H:%M:%S")

#将日期时间转换为你指定的格式,并返回字符串。 dt2 = datetime.strftime(dt,"%d %B %Y")

希望这能解决你的问题。

1

因为 o.create_order 返回的是一个字符串,而不是日期时间对象,即使在数据库中,这个字段是时间戳。OpenERP 的 ORM 返回的是 ISO 8601 格式的字符串。

你需要使用 formatLang 方法,这个方法可以在 RML 报告中找到,或者使用 Python 的 datetime 模块来创建一个 datetime 对象。

试试这个:

datetime.strftime('%d %B %Y', o.create_order')

撰写回答