yyyy yesterday parse only current python string macos date datetime

python - yesterday - Compruebe si la cadena tiene fecha, cualquier formato



strftime python (2)

Eche un vistazo a la función de parse en dateutils.parser . Es capaz de analizar casi cualquier cadena a un objeto de datetime y datetime .

Si simplemente quiere saber si una cadena en particular podría representar una fecha, puede probar la siguiente función:

from dateutil.parser import parse def is_date(string): try: parse(string) return True except ValueError: return False

Entonces tiene:

>>> is_date("1990-12-1") True >>> is_date("xyznotadate") False

Una nota de precaución: el parse puede reconocer algunas cadenas como fechas que no desea tratar como fechas, por ejemplo, "23, 4" se analizarán como datetime.datetime(2023, 4, 16, 0, 0) . Es posible que necesite controles adicionales si desea detectar estos casos.

¿Cómo verifico si una cadena puede ser analizada a una fecha?

  • 19 de enero de 1990
  • 19 de enero de 1990
  • 19 de enero de 1990
  • 19/01/1990
  • 19/01/90
  • 1990
  • Enero de 1990
  • Enero de 1990

Estas son todas las fechas válidas. Si existe alguna inquietud con respecto a la falta de espacio entre las cosas en el artículo 3 y el último artículo anterior, se puede remediar fácilmente insertando automáticamente un espacio entre letras / caracteres y números, si es necesario.

Pero primero, lo básico:

Intenté ponerlo en una if statement :

if datetime.strptime(item, ''%Y'') or datetime.strptime(item, ''%b %d %y'') or datetime.strptime(item, ''%b %d %Y'') or datetime.strptime(item, ''%B %d %y'') or datetime.strptime(item, ''%B %d %Y''):

Pero eso está en un bloque try-except, y sigue devolviendo algo como esto:

16343 time data ''JUNE1890'' does not match format ''%Y''

A menos que se cumpla la primera condición en la sentencia if .

Para aclarar, no necesito realmente el valor de la fecha, solo quiero saber si lo es. Idealmente, habría sido algo como esto:

if item is date: print date else: print "Not a date"

¿Hay alguna manera de hacer esto?


Si desea analizar esos formatos en particular, puede compararlos con una lista de formatos:

txt=''''''/ Jan 19, 1990 January 19, 1990 Jan 19,1990 01/19/1990 01/19/90 1990 Jan 1990 January1990'''''' import datetime as dt fmts = (''%Y'',''%b %d, %Y'',''%b %d, %Y'',''%B %d, %Y'',''%B %d %Y'',''%m/%d/%Y'',''%m/%d/%y'',''%b %Y'',''%B%Y'',''%b %d,%Y'') parsed=[] for e in txt.splitlines(): for fmt in fmts: try: t = dt.datetime.strptime(e, fmt) parsed.append((e, fmt, t)) break except ValueError as err: pass # check that all the cases are handled success={t[0] for t in parsed} for e in txt.splitlines(): if e not in success: print e for t in parsed: print ''"{:20}" => "{:20}" => {}''.format(*t)

Huellas dactilares:

"Jan 19, 1990 " => "%b %d, %Y " => 1990-01-19 00:00:00 "January 19, 1990 " => "%B %d, %Y " => 1990-01-19 00:00:00 "Jan 19,1990 " => "%b %d,%Y " => 1990-01-19 00:00:00 "01/19/1990 " => "%m/%d/%Y " => 1990-01-19 00:00:00 "01/19/90 " => "%m/%d/%y " => 1990-01-19 00:00:00 "1990 " => "%Y " => 1990-01-01 00:00:00 "Jan 1990 " => "%b %Y " => 1990-01-01 00:00:00 "January1990 " => "%B%Y " => 1990-01-01 00:00:00