在日期时间增加天数

时间:2018-06-25 09:39:37

标签: python odoo-8 odoo odoo-9

我不会添加到计划的日期整数。它总是从1到10,但是我的代码有问题。

planned_date = fields.Date(string='Planned Date', required=False,
                           default=fields.Date.today)
def linedate(self):    
    if line.discount > 5:

        daysz = line.product_id.seller_ids[0].delay # it's integer from 1 to 10 always

        planned = (line.planned_date + timedelta(days=daysz) ).strftime('%Y-%m-%d')
        line.planned_date =  planned
        print line.planned_date

我遇到这种错误

  

planned =(line.planned_date + timedelta(days = daysz)).strftime('%Y-%m-%d')

     

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到datetime.timedelta

3 个答案:

答案 0 :(得分:2)

line.planned_date是Unicode字符串对象。您需要将其转换为datetime对象,然后使用timedelta添加。

例如:

import datetime
planned = (datetime.datetime.strptime(line.planned_date, '%Y-%m-%d') + datetime.timedelta(days=daysz) ).strftime('%Y-%m-%d')

答案 1 :(得分:2)

您需要转换planned_date,因为Odoo将日期存储为字符串,最好使用Date方法从字符串转换为Date对象,您可以参考Odoo fields

  
    

static from_string(value):将ORM值转换为日期值。

         

静态to_string(值):将日期值转换为ORM期望的格式。

  
    def linedate(self):
    if line.discount > 5:
        daysz = line.product_id.seller_ids[0].delay  # it's integer from 1 to 10 always

        planned = fields.Date.from_string(line.planned_date) + timedelta(days=daysz)
        line.planned_date = fields.Date.to_string(planned)
        print line.planned_date

答案 2 :(得分:1)

安装dateutilpip install python-dateutil),然后可以轻松地将line.planned_date解析为日期时间对象

from dateutil import parser
planned = (parser.parse(line.planned_date) + timedelta(days=daysz) ).strftime('%Y-%m-%d')