Odoo 计算字段 Year from date_invoice

Odoo computed field Year from date_invoice

如何从日期字段 (x_date_invoice) 中仅提取年份到新计算的 odoo 字段,例如 x_jaar

我正在使用 Odoo 10。

fields.Datetime 和 fields.Date 存储为字符串,是否必须解析为 python 日期时间。然后就可以提取年份了。

datetime.strptime(your_datetime, your_datetime_format).year

你好 Pelingier,

Python、

的基本功能

strptime()

描述 strptime() 方法根据格式解析表示时间的字符串。 return 值是 struct_time,由 gmtime() 或 localtime() 编辑 return。

格式参数使用与 strftime() 使用的指令相同的指令;它默认为 "%a %b %d %H:%M:%S %Y" 匹配格式 return 由 ctime() 编辑。

如果string不能按格式解析,或者解析后有多余的数据,会抛出ValueError。

语法
以下是 strptime() 方法的语法:

time.strptime(string[, format])

参数
string -- 这是将根据给定格式解析的字符串格式的时间。
format -- 这是用于解析给定字符串的指令。

strftime()

描述 方法 strftime() 将元组或 struct_time 表示由 gmtime() 或 localtime() 编辑的 return 时间转换为由格式参数指定的字符串。

如果未提供 t,则使用由 localtime() return编辑的当前时间。格式必须是一个字符串。如果 t 中的任何字段超出允许范围,则会引发异常 ValueError。

语法
以下是 strftime() 方法的语法:

time.strftime(format[, t])

参数
t -- 这是要格式化的时间(以秒为单位)。
format -- 这是用于格式化给定时间的指令。以下指令可以嵌入格式字符串中:

============================================= =============================

你的问题解答

使用 DateTime 的所有功能后,第一个导入库来自 datetime import datetime

试试下面的代码,

for record in self:
    record['x_jaar'] = str(datetime.strptime(record['x_date_invoice'],"%d/%m/%Y %H:%M:%S").strftime("%Y"))

希望我的回答对您有所帮助。
如有任何疑问请留言。

odoo 中,使用

导入日期时间

import datetime

不是通常的方式:

from datetime import datetime

也就是说,您应该使用此代码:

str(datetime.datetime.strptime(record['x_date_invoice'],"%Y-%m-%d %H:%M:%S").strftime("%Y"))

date_invoice 字段值是一个字符串,要获取年份,您需要使用例如在评估上下文中可用的 datetime 来解析它。

您可以查看 Compute 字段后 How to define a computed field 部分下的帮助

The only predefined variables are
    self (the set of records to compute)
    datetime (Python module)
    dateutil (Python module)
    time (Python module)

Other features are accessible through self, like self.env, etc.

示例:

for record in self:
    record['x_jaar'] = datetime.datetime.strptime(record.date_invoice, "%Y-%m-%d").year

由于 Odoo 12 日期和日期时间是对象,要获取年份只需使用 year 属性:

示例:

for record in self:
    if record.date_invoice:
        record['x_jaar'] = record.date_invoice.year

作为 python 的新手,不得不尝试此处提到的所有建议,但无法使其发挥作用。经过几次试验和错误,在 odoo 14 中,下面的代码对我有用(在计算字段部分)- 希望这对某人有所帮助。

自我记录: 记录['x_studio_maand'] = record.x_studio_date_start.strftime("%B %Y") #从日期时间字段中获取月份和年份