2014-04-07 173 views
9

我想將字符串日期轉換爲django日期格式。我嘗試了一種方法。但沒有工作。Django字符串日期格式

date = datetime.datetime.strptime(request.POST.get('date'),"Y-mm-dd").date() 

我得到了這個錯誤。

time data '2014-04-07' does not match format 'Y-mm-dd' 

我的代碼有什麼問題。

回答

16

它應該是%Y-%m-%d

>>> s = "2014-04-07" 
>>> datetime.datetime.strptime(s, "%Y-%m-%d").date() 
datetime.date(2014, 4, 7) 

按照documentation

  • %Y代表與世紀一年的十進制數
  • %m - 每月零填充小數號碼
  • %d - 本月的一天爲零填充的十進制imal號碼

希望有所幫助。

13

在這種情況下使用django的dateparse可能會很方便。

from django.utils.dateparse import parse_date 
date_str = request.POST.get('date') 
date = parse_date(date_str) 
+5

'parse_date'未正常工作espected並返回'None'如果日期不在'%Y-%間%D'格式。 –

3

django.utils.dateparse.parse_date函數將返回None,如果給定的日期不是%Y-%m-%d格式

我還沒有發現在Django源代碼的功能由DATE_INPUT_FORMATS解析字符串。所以我寫了一個自定義幫助函數,並且我已經添加到這裏來幫助其他人。

from datetime import datetime 
from django.utils.formats import get_format 

def parse_date(date_str): 
    """Parse date from string by DATE_INPUT_FORMATS of current language""" 
    for item in get_format('DATE_INPUT_FORMATS'): 
     try: 
      return datetime.strptime(date_str, item).date() 
     except (ValueError, TypeError): 
      continue 

    return None