【问题标题】:Django - Get only date from datetime.strptimeDjango - 仅从 datetime.strptime 获取日期
【发布时间】:2013-08-05 01:39:36
【问题描述】:

我在数据库中的开始日期字段为日期(不是日期时间)。在 forms.py 中的保存方法中,我使用datetime.strptime(date_string, '%Y-%m-%d') 将字符串转换为日期。该方法返回我格式化的日期和时间,即“2006-08-03 00:00:00”。

我只想要日期而不想要时间。因为我收到一个“无效的日期格式错误”说“它必须是 YYYY-MM-DD 格式”,所以我对此感到沮丧。谁能帮我解决这个问题?

【问题讨论】:

  • 如果您使用的是 django 表单,则使用 django DateField 来处理它的验证。方便多了。
  • 将字段更改为 DateField 有所帮助。谢谢老兄。

标签: python django datetime


【解决方案1】:

我认为您需要日期对象而不是日期时间。 尝试使用 datetime 对象上的 date() 方法将日期时间转换为日期

from datetime import datetime
datetime.strptime('2014-12-04', '%Y-%m-%d').date()

【讨论】:

  • 如果有 strpdate() 就好了
  • 这绝对比必须包装 datetime.date(result) 好
【解决方案2】:

Iazy functor 的回答很有帮助。对于想要将其用作模板标签的人:

from django import template
from datetime import datetime

register = template.Library()

@register.filter(name='todate')
def convert_str_date(value):
    return datetime.strptime(value, '%Y-%m-%d').date()

然后在你的 HTML 中导入你的 template.py 并将其用作:

{{ date_in_str|todate }}

Output: 2021.01.22

如果要更改日期格式:

{{ date_in_str|todate|date:"d N Y" }}

Output: 22 Jan. 2021

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2016-03-24
    相关资源
    最近更新 更多