【问题标题】:How to make it work datetime datetime strptime如何使它工作 datetime datetime strptime
【发布时间】:2019-09-11 13:55:05
【问题描述】:

你能告诉我为什么它不把日期转换成数字吗?

import datetime
from datetime import datetime
from datetime import timedelta
from django.db import models


def end_date():
    return datetime.date.today() + timedelta(days=7)

def convert_date_str(add_date):
    return datetime.strftime(add_date, "%m/%m/%Y")


class add(models.Model):
    add_date = models.DateField('Дата додавання', auto_now_add=True)
    end_date = models.DateField('Дата здачі', default=end_date)

因为我没有从数据库字符串月份输出

【问题讨论】:

  • 您期望发生什么?你在哪里调用这些函数?
  • models.py,我需要以 html 格式发布日期 01/02/1999

标签: python django


【解决方案1】:

首先,strftime 需要在 datetime 对象上调用,因此您需要将加法语句括在括号中。

from datetime import datetime, timedelta

def end_date(): 
    return (datetime.today() + timedelta(days=7)).strftime("%d %B, %Y")

strptimedatetime.datetime 之下,所以你走得太深了。无论如何,您的第二个功能没有意义。您只能来自字符串的strptime,而不是datetime 对象。您也不应该使用相同的函数和变量名称。如果您尝试将 31/01/1999 之类的日期字符串转换为 datetime 对象,您可以这样做

def convert_to_datetime(date_str):
    return datetime.strptime(date_str, '%d/%m/%Y')

您的函数名称也应该更具描述性,因为目前我认为它们中的任何一个都没有描述它的实际功能。

【讨论】:

  • 我尝试将对象变成日期字符串
【解决方案2】:

您可能会收到属性错误,因为timedelta 没有strftime 方法。你想要的是:

def end_date():
    # add date object to timedelta first then get string
    return (datetime.date.today() + timedelta(days=7)).strftime("%d %B, %Y")

其次,strptime 方法接受一个字符串并生成一个datetime 对象。 add_datedate 对象而不是字符串

def add_date():
    add_date = datetime.date.today()  # <-- this should be a string for strptime to work
    # whats dt in your example?, also strptime argument must be a string
    data_object = datetime.datetime.strptime(add_date, "%d %B, %Y").date()
    return  data_object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2019-07-17
    • 2013-01-05
    • 2017-10-15
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多