yyyy parse example create python parsing datetime tryparse

example - DateTime.TryParse() en Python?



strftime python (6)

Aquí hay una implementación de función equivalente

import datetime def try_strptime(s, format): """ @param s the string to parse @param format the format to attempt parsing of the given string @return the parsed datetime or None on failure to parse @see datetime.datetime.strptime """ try: date = datetime.datetime.strptime(s, format) except ValueError: date = None return date

¿Existe un equivalente a DateTime.TryParse() C # en Python?

Editar:

Me refiero al hecho de que evita lanzar una excepción, no el hecho de que adivine el formato.



Si no desea la excepción, capture la excepción.

try: d = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S") except ValueError: d = None

En el zen de python, explícito es mejor que implícito. strptime siempre devuelve una fecha y hora analizada en el formato exacto especificado. Esto tiene sentido, porque tienes que definir el comportamiento en caso de falla, tal vez lo que realmente quieres es.

except ValueError: d = datetime.datetime.now()

o

except ValueError: d = datetime.datetime.fromtimestamp(0)

o

except ValueError: raise WebFramework.ServerError(404, "Invalid date")

Al hacerlo explícito, está claro para la siguiente persona que lo lea cuál es el comportamiento de conmutación por error y que es lo que necesita.

o tal vez confía en que la fecha no puede ser inválida, proviene de una columna DATETIME de la base de datos, en cuyo caso no habrá una excepción que atrapar, por lo que no la detectará.


Use time.strptime para analizar las fechas de las cadenas.

Documentación: http://docs.python.org/library/time.html#time.strptime

Ejemplos de: http://pleac.sourceforge.net/pleac_python/datesandtimes.html

#----------------------------- # Parsing Dates and Times from Strings time.strptime("Tue Jun 16 20:18:03 1981") # (1981, 6, 16, 20, 18, 3, 1, 167, -1) time.strptime("16/6/1981", "%d/%m/%Y") # (1981, 6, 16, 0, 0, 0, 1, 167, -1) # strptime() can use any of the formatting codes from time.strftime() # The easiest way to convert this to a datetime seems to be; now = datetime.datetime(*time.strptime("16/6/1981", "%d/%m/%Y")[0:5]) # the ''*'' operator unpacks the tuple, producing the argument list.


No, lo que estás pidiendo no es idiomático Python, por lo que generalmente no habrá funciones que descarten errores como ese en la biblioteca estándar. Los módulos de biblioteca estándar relevantes están documentados aquí:

http://docs.python.org/library/datetime.html

http://docs.python.org/library/time.html

Todas las funciones de análisis generan excepciones en la entrada no válida.

Sin embargo, como han afirmado las otras respuestas, no sería terriblemente difícil construir una para su aplicación (su pregunta fue redactada "en Python" en lugar de "en la biblioteca estándar de Python", por lo que no está claro si la asistencia para escribir dicha función "en Python" está respondiendo la pregunta o no).


La fuerza bruta también es una opción:

def TryParse(datestring, offset): nu = datetime.datetime.now() retval = nu formats = ["%d-%m-%Y","%Y-%m-%d","%d-%m-%y","%y-%m-%d"] if datestring == None: retval = datetime.datetime(nu.year,nu.month,nu.day,0,0,0) - datetime.timedelta(offset,0,0,0,0,0,0) elif datestring == '''': retval = datetime.datetime(nu.year,nu.month,nu.day,0,0,0) - datetime.timedelta(offset,0,0,0,0,0,0) else: succes = False for aformat in formats: try: retval = datetime.datetime.strptime(datestring,aformat) succes = True break except: pass if not succes: retval = datetime.datetime(nu.year,nu.month,nu.day,0,0,0) - datetime.timedelta(offset,0,0,0,0,0,0) return retval