为什么在使用strptime时出现此datetime日期错误

时间:2019-03-25 05:50:09

标签: python python-3.x python-2.7 odoo odoo-12

TypeError: strptime() argument 1 must be str, not datetime.date

运行以下代码时,出现上述错误。您对此有任何想法吗?

import datetime
from datetime import datetime, timedelta
import babel
import time


date_format = "%Y-%m-%d"
class HrPayslipEmployees(models.TransientModel):
    _inherit = 'hr.payslip.employees'

@api.one
    def compute_date_diff(self, ds, dt):
        from datetime import datetime
        d1 = datetime.strptime(ds, "%Y-%m-%d")
        d1 = str(d1)
        d2 = datetime.strptime(dt, "%Y-%m-%d")
        d2 = str(d2)
        days = (d2 - d1).days + 1
        if days < 0:
            days = 0
        return days

但是相同的代码在Pythin 2.7中可以完美地工作,但是上面的代码是我在Python 3.x上运行的

该程序的导入库也在上面提到。

先谢谢了。完整的代码就在这里。

3 个答案:

答案 0 :(得分:2)

您不必将date转换为str

在Python 3.x中

from datetime import datetime

def compute_date_diff(ds, dt):
    d1 = datetime.strptime(ds, "%Y-%m-%d")
    d2 = datetime.strptime(dt, "%Y-%m-%d")
    days = (d2 - d1).days + 1
    if days < 0:
        days = 0
    return days

print(compute_date_diff('2019-01-01', '2019-02-01'))

输出

32

答案 1 :(得分:2)

import datetime
from datetime import datetime, timedelta


date_format = "%Y-%m-%d"


def compute_date_diff( ds, dt):
    d1 = datetime.strptime(ds, "%Y-%m-%d")
    d2 = datetime.strptime(dt, "%Y-%m-%d")
    days = (d2 - d1).days + 1
    if days < 0:
        days = 0
    return days
print(compute_date_diff("2019-03-24","2019-03-25"))

这在python3中工作正常。您无需将d1和d2转换为字符串即可查找日期。

答案 2 :(得分:1)

让我在Odoo上下文中回答。使用this commit后,您的旧代码将无法使用。因为在此之前,您已经获得了字符串作为Odoo中DateDatetime字段的值。在此提交之后,您将获得python datetime.date的响应。改为datetime.datetime个对象。

因此,只需使用这些对象即可,如果不需要,请勿解析为字符串。