如何将字符串日期转换为datetime.date格式
我想把日期像“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()
对象。