2014-05-10 11 views
11

Mam trzy formaty daty: YYYY-MM-DD, DD.MM.YYYY, DD/MM/YYYY.Jak sformatować ciąg daty za pomocą wielu formatów w pythonie

Czy można sprawdzać poprawność i analizować ciągi znaków, takie jak 2014-05-18 lub 18.5.2014 lub 18/05/2019?

+1

Szukały na [dateutil] (https://labix.org/python- dateutil) - w przeciwnym wypadku - po prostu spróbuj 'strptime'ing po kolei po 3, aby sprawdzić, czy działają, w przeciwnym razie ... –

+1

Dziękuję za komentarz. Chcę używać czystego pythona bez bibliotek stron trzecich –

Odpowiedz

46

Spróbuj każdego formatu i sprawdzić, czy to działa:

from datetime import datetime 

def try_parsing_date(text): 
    for fmt in ('%Y-%m-%d', '%d.%m.%Y', '%d/%m/%Y'): 
     try: 
      return datetime.strptime(text, fmt) 
     except ValueError: 
      pass 
    raise ValueError('no valid date format found') 
+1

Ostatni jest'% y'. Powinien mieć wartość "% Y". –

+1

@Vaibhav dobre miejsce - edytowane - dzięki. –

0

Czysta python:

from datetime import datetime 
my_datetime = datetime.strptime('2014-05-18', '%Y-%m-%d') 
repr(my_datetime) 

>>> 'datetime.datetime(2014,5,18,0,0)' 

Sprawdź datetime.strptime() dokumentacja formatu wiecej strun wielkoformatowych.

+0

Rozwiązanie należy rozszerzyć, aby korzystać z wszystkich formatów daty i wyjaśnić, jak wybrać, który z nich pasuje. –

+0

@Hank Wtedy masz rację, ale odpowiedź powyżej już poprawnie odpowiada na pytanie i nie ma nic do dodania. –

+0

Tak, trudno jest poprawić w @ Clement. –

6
>>> import dateutil.parser 
>>> dateutil.parser.parse(date_string) 

Powinno to zająć się większością standardowych formatów dat w Pythonie 2.7+. Jeśli naprawdę masz super niestandardowe formaty daty, zawsze możesz wrócić do tego, o którym wspomniał Jon Clements.

0

To rzeczywiście problem i był z widokiem i to w jaki sposób i zbliżył go, moim głównym celem było datą Zgarniacze

class InputRequest: 
    "This class contain all inputs function that will be required in this program. " 

     def __init__(self, stockTickerName = 'YHOO', stockSite='yahoo', startDate = None, 
      endDate = datetime.date.today()): 

     def requestInput(self, requestType =''): 
      "Fro requesting input from user" 
      self.__requestInput = input(requestType) 
      return self.__requestInput 


def dateFormat(self, dateType=''): 
    ''' 
     this function handles user date input 
     this repeats until the correct format is supplied 
     dataType: this is the type of date, eg: DOF, Date of Arriveal, etc 

    ''' 
    while True: 
     try: 
      dateString = InputRequest.requestInput(self,dateType) 
      dtFormat = ('%Y/%m/%d','%Y-%m-%d','%Y.%m.%d','%Y,%m,%d','%Y\%m\%d') #you can add extra formats needed 
      for i in dtFormat: 
       try: 
        return datetime.datetime.strptime(dateString, i).strftime(i) 
       except ValueError: 
        pass 

     except ValueError: 
      pass 
     print('\nNo valid date format found. Try again:') 
     print("Date must be seperated by either [/ - , . \] (eg: 2012/12/31 -->): ")