Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Validar fecha ingresada por teclado en Python
#1
Hola, ¿cómo están? -
Dejo un pequeño código, el más conciso que encontré para validar fecha ingresada por teclado, parece funcionar bien, lo único que no puedo realizar es que imprima la fecha de esta manera 18/01/1952 y no 1952/01/18, tal vez sea algo sencillo pero no sé ni como poner en Google. -  Big Grin


Código:
from datetime import datetime

while True:
   try:
       fecha_str = input('\n Ingrese fecha ==> ejemplo "18/01/1952"...: ')
       fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
       break
   except:
       print("\n No ha ingresado una fecha correcta...")

print("\n ", fecha)

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
hola,

de la Página Oficial de Python

Código:
>>> from datetime import date
>>> fecha = date(1987, 1, 22)
>>> print(fecha)
1987-01-22
>>> print(fecha.year)
1987
...
etc.

El formato de la calse date es datetime.date(year, month, day).
En esa pagina tienes, para darle formato, y un monton de metodos mas
Responder
#3
Hola.-
Muchas gracias calvicius me fue muy útil tu post, dejo el código y si lo desean, me digas(digan) en que puedo mejorarlo.-


Código:
def ing_fecha():
     tMes = ("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio",
                      "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre", )
     tDia = ("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado")

     while True:
          try:
               fecha_str = input('\n Ingrese fecha "dd/mm/aaaa"...: ')
               fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
               break
          except:
               print("\n No ha ingresado una fecha correcta...")

     mes = tMes[fecha.month]
     dia_semana = datetime.isoweekday(fecha)
     dia = tDia[dia_semana]
     fecha_completa = dia + " " + str(fecha.day) + " de " + tMes[fecha.month] + " de " + str(fecha.year)

     return fecha_completa
Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#4
ya que veo que tienes tiempo y ganas. Lo siguiente es solo por si te interesa.

A la hora de concatenar variables con constantes, tu usas lo mas fácil:

cadena_final = "la suma final, " + suma +  "procede de " + a + " mas " + b

puede resultar mejor usar el método format. Lo puedes examinar aqui:

https://pyformat.info/

Cuando usas listas/tuplas fijas (dias de semana, sexo, etc...) quizas te interese usar  la libreria enum. Aquí:

https://docs.python.org/3/library/enum.html

el esquema es una especie de lista, donde cada elemento es un par clave-valor. Esto en C se usa bastante, y produce un objeto sobre el que puedes iterar.

saludos.
Responder
#5
Hola, calvicies. -

Cita:ya que veo que tienes tiempo y ganas...... Wink Wink Wink

No pude parar de reír al leer esto, por favor dime como llegaste a esa conclusión. -
Con respecto a tus sugerencias, las voy a tener muy en cuenta. -

Saludos.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#6
Wink 
(23-01-2018, 05:28 PM)Daniel.py escribió: Hola, calvicies. -

Cita:ya que veo que tienes tiempo y ganas...... Wink Wink Wink

No pude parar de reír al leer esto, por favor dime como llegaste a esa conclusión. -
Con respecto a tus sugerencias, las voy a tener muy en cuenta. -

Saludos.

uno de 60 no está muy lejos de uno de 65 Angel

saludos,
Responder
#7
Hola Daniel, gracias por el código. Yo por mi parte insisto en siempre tener en claro qué excepción quiero capturar y cuál es la línea que potencialmente la origina.

  1. while True:
  2. try:
  3. fecha_str = input('\n Ingrese fecha "dd/mm/aaaa"...: ')
  4. fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
  5. break
  6. except:
  7. print("\n No ha ingresado una fecha correcta...")


Lo que ocurre con este código es que cualquier excepción originada en las líneas 3-5 hará que el programa diga "No se ha ingresado una fecha correcta" (por ejemplo, la excepción KeyboardInterrupt si el usuario presiona CTRL + C para terminar el programa). Eso se soluciona fácilmente indicando qué excepción esperamos. Sabemos que strptime() lanza ValueError si el formato de la fecha indicada no es correcto.

  1. while True:
  2. try:
  3. fecha_str = input('\n Ingrese fecha "dd/mm/aaaa"...: ')
  4. fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
  5. break
  6. except ValueError:
  7. print("\n No ha ingresado una fecha correcta...")


Pero también sabemos que la línea que lanza el error es la número 4, así que basta con que ella sola esté dentro del bloque try/except.

  1. while True:
  2. fecha_str = input('\n Ingrese fecha "dd/mm/aaaa"...: ')
  3. try:
  4. fecha = datetime.strptime(fecha_str, '%d/%m/%Y')
  5. except ValueError:
  6. print("\n No ha ingresado una fecha correcta...")
  7. else:
  8. break


A propósito de la recomendación de calvicius sobre la formación de cadenas de caracteres te invito a que leas este artículo sobre el tema!

(23-01-2018, 03:52 PM)calvicius escribió: puede resultar mejor usar el método format. Lo puedes examinar aqui:

https://pyformat.info/

Buen material!

Saludos!
Responder
#8
Hola, ¿cómo están?
calvicius, totalmente de acuerdo hoy con 66 años estoy no menos de 10 horas diarias frente
a la compu y 9.30 dedicada a python. -
Francisco es la segunda vez que me haces notar mi error con respecto a las excepciones, lo voy
a tener muy en cuenta, de hecho, ya modifique el código. -
Por último, esa es la manera como quedo, ¿es correcto?

Código:
fecha_completa = f"{dia} {fecha.day} de {tMes[fecha.month]} de {fecha.year}"

Un abrazo y gracias por el tiempo.
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#9
Perfecto Daniel! Un saludo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)