如何将字符串日期转换为datetime.date格式

0 投票
2 回答
4111 浏览
提问于 2025-04-18 08:40

我想把日期像“6月28日”这样的格式转换成“2014-06-28”这种datetime格式。我试过以下代码,还有很多其他的变种,在ipython里输出结果是正确的,但我无法把记录保存到数据库里。它报错说值的日期格式无效,必须是YYYY-MM-DD格式。有没有人能帮我解决这个问题?

以下是代码片段

            m = "Jun"
            d = 28
            y = datetime.datetime.now().year
            m = strptime(m,'%b').tm_mon
            if m > datetime.datetime.now().month:
                y=y-1
            new_date = str(d)+" "+str(m)+" "+str(y)
            new_date = datetime.datetime.strptime(new_date, '%b %d %Y').date()

我的models.py文件是这样的

class Profile(models.Model):
    Name = models.CharField(max_length = 256, null = True, blank = True)
    Location = models.CharField(max_length = 256, null = True, blank = True)
    Degree = models.CharField(max_length = 256, null = True, blank = True)
    Updated_on = models.DateField(null = True, blank = True)

保存到模型的代码是这样的

def save_record(self):
    try:
        record = Profile(Name= indeed.name,
            Location = loc,
            Degree = degree,
            Updated_on = new_date,
            )
        record.save()
        print "Record added"
    except Exception as err:
        print "Record not added ",err
        pass

提前谢谢大家

2 个回答

0

我在控制台上试了一下:

>>import datetime
>>datetime.datetime.strptime("Jun-08-2013", '%b-%d-%Y').date()
datetime.date(2013, 6, 8)

代码里有几个错误。所以解决方案应该是:

        m = "Jun"
        d = 28
        if datetime.datetime.strptime("Aug",'%b').month > datetime.datetime.now().month:
            y= (datetime.datetime.now() - relativedelta(years=1)).year   #from dateutil.relativedelta import relativedelta
        else:
             y=datetime.datetime.now().year
        new_date =  str(m)+"-"+str(d)+"-"+str(y)
        new_date = datetime.datetime.strptime(new_date, '%b-%d-%Y').date()

new_date 是一个日期对象,所以它应该可以直接保存到 models.DateField() 中,不会有任何问题(包括格式问题)。

3

一旦你有了一个 date 对象,你就可以使用 strftime() 函数把它 格式化 成一个字符串。

假设 new_date 是你问题中的日期对象。那么你可以这样做:

new_date.strftime('%Y-%m-%d')

顺便说一下,你也可以对 datetime 对象做同样的事情。

编辑:请仔细检查一下你的 Updated_on 字段是使用 DateField 还是 DateTimeField。这会影响你是使用 datetime.date() 对象还是 datetime.datetime() 对象。

撰写回答