【问题标题】:combine() argument 1 must be datetime.date, not str - When displaying time - Djangocombine() 参数 1 必须是 datetime.date,而不是 str - 显示时间时 - Django
【发布时间】:2015-04-24 08:53:48
【问题描述】:

当我尝试使用此代码时:

date = datetime.datetime.now().strftime('%I:%M')

它给了我这个错误:

“combine() 参数 1 必须是 datetime.date,而不是 str”。

编辑:

我认为我的错误在这里:

naive_start = datetime.datetime.combine(date, datetime.time.min)

我不确定我做错了什么。我应该怎么做?

【问题讨论】:

  • 这段代码是正确的。错误必须在其他行中。提供更多上下文。
  • .strftime('%I:%M') 将返回您的字符串。请检查您在哪里传递 date 变量。如果可能,请提供完整的回溯。
  • 我刚刚在 python 2.7 和 3.4 中运行了它,它工作正常。不知道你的有什么问题:s
  • @catavaran 您在这个新代码中看到错误了吗?
  • @Lafada 你在这个新代码中看到错误了吗?

标签: python django datetime django-views


【解决方案1】:

date var 的类型不是 date/datetime 实例,而是 string。

>>> import datetime
>>> date = datetime.datetime.now().strftime('%I:%M')
>>> type(date)
<type 'str'>

我猜你正在尝试将它与 datetime.datetime.combine 一起使用

>>> datetime.datetime.combine(date, datetime.time(10, 23))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: combine() argument 1 must be datetime.date, not str

虽然你应该使用date/datetime 对象。

>>> datetime.datetime.combine(datetime.datetime.now(), datetime.time(10, 23))
datetime.datetime(2015, 2, 23, 10, 23)

【讨论】:

    【解决方案2】:
    date = datetime.datetime.now().strftime('%I:%M')
    naive_start = datetime.datetime.combine(date, datetime.time.min)
    

    我应该做些什么不同的事情?

    “combine() 参数 1 必须是 datetime.date,而不是 str”。 错误消息提示您应该不调用转换 datetime 的 .strftime() 方法对象转换成字符串,删除它:

    import datetime
    
    date = datetime.datetime.now()
    naive_start = datetime.datetime.combine(date, datetime.time.min)
    

    其中naive_start 包含当地时间的一天(午夜)的开始时间,作为天真的datetime 对象。

    顺便说一句,如果代码在您的 django 应用程序中的服务器上运行,那么本地(服务器)时区对于可能位于不同时区(来自服务器和彼此)的客户端可能不是很有用。 Configure timezones.

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2018-09-04
      • 2020-07-11
      • 2017-10-21
      • 2018-10-11
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2019-10-29
      相关资源
      最近更新 更多