我希望像日期时间格式一样转换日期为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
提前致谢
答案 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()
而不会出现任何问题(包括格式问题)。