1
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 上运行的

上面还提到了程序的导入库。

提前致谢。完整的代码就在上面。

4

3 回答 3

2

您不必将其转换datestr

在 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
于 2019-03-25T05:59:01.537 回答
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 转换为字符串来查找日期。

于 2019-03-25T05:59:12.840 回答
1

让我在 Odoo 上下文中回答。有了这个提交,你的旧代码就不再工作了。因为在此之前,您在 Odoo 中将字符串作为值Date和字段。Datetime在这个提交中,你得到了 python datetime.dateresp。datetime.datetime而是对象。

因此,只需使用这些对象,如果不需要,不要解析成字符串或从字符串解析。

于 2019-03-25T09:54:28.723 回答