2017-02-05 2 views
1

Ich habe eine Zeichenfolge, die ich in das Datetime-Format konvertieren muss. Das Problem ist, dass es nicht immer das gleiche Format hat. Im Moment benutze ich try, außer um alle Formate auszuprobieren, die mir begegnen könnten (siehe Code unten). Gibt es eine Möglichkeit dies generisch für alle Zeitformate zu tun?Parse-Zeit mit verschiedenen Formaten

import datetime 

def get_time(start_time):  
     try: 
      start_time = datetime.datetime.strptime(start_time, '%m/%d/%y %H:%M:%S')          
      return start_time 
     except: 
      try: 
       start_time = datetime.datetime.strptime(start_time, '%H:%M:%S')     
       return start_time 
      except: 
       try: 
        start_time = datetime.datetime.strptime(start_time, '%m/%d/%Y %H:%M')      
        return start_time 
       except: 
        print("Error could not convert datetime format") 
+0

Verwenden Sie die Liste mit Mustern und 'für' Schleife. – furas

Antwort

3

Ich denke, dass dateutil würde für eine Aufgabe wie diese sehr nützlich sein - es angemessen die meisten Formate analysieren kann.

>>> from dateutil import parser 
>>> parser.parse(start_time) 

Alternativ glaube ich Ihnen, die richtige Idee haben mit try/except-Anweisungen, aber Sie sollten nur alle Formate in einer Liste platzieren und mit einem einzigen try-except-Block statt der hässlichen über die Liste iterieren Verschachtelung.

formats = ['%m/%d/%y %H:%M:%S', '%H:%M:%S', '%m/%d/%Y %H:%M']    
def get_time(start_time): 
    for formt in formats: 
     try: 
      return datetime.strptime(start_time, formt) 
     except ValueError: 
      pass 
    print('Could not convert datetime format') 
    # or raise an error 
+0

Danke Mitch, du hast Recht, das ist hübscher. – sparrow

+0

@sparrow Sie sind herzlich willkommen! – miradulo

Verwandte Themen