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

时间:2014-06-05 06:33:12

标签: python django datetime

我希望像日期时间格式一样转换日期为Jun 28,如2014-06-28。我尝试了下面的代码和更多的变体,它给了我正确的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 :(得分:2)

拥有date对象后,您可以使用strftime()功能将format字符串转换为字符串。

让我们说new_date是你问题的日期对象。然后你可以这样做:

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

顺便说一句,您也可以使用datetime对象执行相同操作。

修改 仔细检查您的Updated_on字段是使用DateField还是DateTimeField。这将影响您是分别使用datetime.date()对象还是datetime.datetime()对象。

答案 1 :(得分: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()而不会出现任何问题(包括格式问题)。