2016-11-04 3 views
0

Wir Python-Bibliothek Datetime-Bibliothek String-Datum Datum Art des angegebenen Formats mit dem folgende Verfahren zu konvertieren: jede BibliothekPython-Bibliothek extrahieren Datumsformat aus gegebenem String

datetime.strptime("2016-12-21", "%Y-%m-%d") 

Aber tun wir haben, da ein Datum string schlägt das Format des Datums vor. für das Beispiel gegeben:

2016-12-21

als Eingang, gibt den Ausgang:

% Y-% m-% d

+2

Wie sollte eine solche Bibliothek entscheiden, ob die '11' in' 2016-11-04' der Monat oder der Tag des Monats ist? –

+0

Stimmen Sie mit Lutz überein, haben aber oft gleiches Problem, dann stehen typischerweise O (1000) solche String-Daten zur Verfügung. Also route ich Brute-Force und versuche, einen Satz gegebener Formate mit 'strptime' zu ​​vergleichen und hoffentlich eine eindeutige Übereinstimmung zu erhalten. –

+0

was ist dein zweck? Wie Lutz gesagt hat, ist es eine Eins-zu-viele-Frage. –

Antwort

1

Ich kenne keine Bibliothek mit der Funktionalität, die Sie fragen, aber es ist nicht so schwierig, eine Funktion zu schreiben, die die passenden Formate für eine gegebene Zeichenfolge zurückgibt.

Obwohl dieses nicht löst das Problem einer Zeichenfolge in mehr als einem Format übereinstimmen.

Hier ist ein Beispiel für einige statische allgemeine Formate auf numerisch basierten Datum.

date_formats = ["%Y-%m-%d", "%d-%m-%Y", "%m-%d-%Y", "%Y/%m/%d", "%d/%m/%Y", "%m/%d/%Y", "%Y.%m.%d", "%d.%m.%Y", "%m.%d.%Y", "%c", "%x"] 

def string_to_date(str): 
    match = [] 
    for fmt in date_formats: 
     try: 
      datetime.strptime(str, fmt) 
     except ValueError as e: 
      print(e) 
      continue 
     match.append(fmt) 
    return match 

Und einige repräsentative Ausgabe:

print(string_to_date("11.12.2015")) # ['%d.%m.%Y', '%m.%d.%Y'] 
print(string_to_date("21/12/2015")) # ['%d/%m/%Y'] 

Natürlich können Sie Code, um Ihre Formate dynamisch zu bauen schreiben kann, aber in diesem Fall ich denke, es wird zu breit.

Falls Sie sich für einen dynamischen Ansatz entscheiden würden, würde ich vorschlagen, zuerst das mögliche Trennzeichen in Ihrem Skript abzufangen und dann das Format zu erstellen.