sábado, 27 de septiembre de 2014

Tutorial de Python parte 20 - módulo datetime fecha y hora




A continuación veremos un módulo nativo de Python llamado datetime, en este módulo se encuentran dos objetos (date y datetime) muy interesantes que nos van a permitir crear y obtener formatos de fecha y hora.

Para importar los objetos date y datetime lo haremos de la siguiente forma ...


from datetime import date, datetime


El Objeto date

El Objeto date proporciona una serie de métodos y propiedades que permiten obtener la fecha.

today() es un método clase del objeto date.

  • date.today() : Regresa la fecha local actual con el siguiente formato 2014-09-27
  • date.today().day: Regresa un número entero con el día del mes. Ejemplo: 27
  • date.today().month: Regresa un número entero con el mes del año. Ejemplo: 9 corresponde a septiembre
  • date.today().year:  Regresa un número de 4 dígitos con el año actual: Ejemplo: 2014
  • date.today().weekday(): Regresa un número entero con el día de la semana: 0 = lunes, 1 = martes, 2 = miércoles, 3 = jueves, 4 = viernes, 5 = sábado y 6 = domingo

Para crear un formato personalizado con la propiedades month, ya que nos regresa un número entero que representa el mes, lo lógico es crear por ejemplo un diccionario para asignarle el mes correspondiente a cada número, por ejemplo ....

mes = {1:"Enero", 2:"Febrero", 3:"Marzo", 4:"Abril", 5:"Mayo", 6:"Junio", 7:"Julio", 8:"Agosto", 9:"Septiembre", 10:"Octubre", 11:"Noviembre", 12:"Diciembre"}


Luego accederiamos al mes correspondiente de la siguiente forma ...

print("Mes actual:", mes[date.today().month])


Del mismo modo haremos para formatear el día de la semana, ya que el método weekday() nos regresa un número entero del 0 al 6, correspondiéndole al 0 el lunes y al 6 el domingo ...

dia_semana = {0:"Lunes", 1:"Martes", 2:"Miércoles", 3:"Jueves", 4:"Viernes", 5:"Sábado", 6:"Domingo"}


Y accederiamos al día de la semana formateado al español de la siguiente forma ...

#importante: cuando se usan por ejemplo vocales acentuadas el script python ha de estar codificado en UTF-8
#de lo contrario obtendrás un error
print("Día de la semana:", dia_semana[date.today().weekday()])


El Objeto datetime

El Objeto datetime es un objeto que contiene toda la información de un objeto date y un objeto time, esto quiere decir que podemos utilizar los mismos métodos y propiedades que vimos anteriormente con el objeto date, pero en este caso accederiamos a través de datetime, por ejemplo: 

datetime.today().day | datetime.today().month | ....

Pero también nos ofrece la posibilidad de acceder al objeto time que nos permite obtener la hora actual a través del método clase now() ...

  • datetime.now() : Regresa la fecha y hora actual con el siguiente formato: 2014-09-27 14:38:41.343750
  • datetime.now().second : Regresa un número entero en un rango del 0 al 60 con los segundos de la hora actual.
  • datetime.now().minute: Regresa un numero entero en un rango del 0 al 60 con los minutos de la hora actual.
  • datetime.now().hour: Regresa un numero entero en un rango del 0 al 24 con la hora actual.
  • datetime.now().microsecond: Regresa los microsegundos de la hora actual en un rango de 0 a 1000000

Formatos personalizados de fecha y hora a través del método strftime

El método strftime(string) es uno de los métodos más interesantes del objeto datetime ya que permite a través de una serie de directivas crear strings con formatos de fecha y hora personalizados.

Algunas directivas del método strftime(string):

%Y : Regresa el año con 4 dígitos
%m : Regresa el mes con 2 dígitos
%d : Regresa el día con 2 dígitos
%H : Regresa la hora con 2 dígitos. 24 horas
%M : Regresa los minutos con 2 dígitos
%S : Regresa los segundos con 2 dígitos

Para ver más directivas ve a la siguiente página ... https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

Un ejemplo de como usar strftime(string) ...


print("Fecha y hora actual:", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
#Resultado: Fecha y hora actual: 2014-09-27 14:38:41


Como puedes ver el resultado es: Fecha y hora actual: 2014-09-27 14:38:41


A continuación podéis ver el código del capítulo del vídeo tutorial ... 


#Este documento contiene vocales acentuadas y la ñ
#IMPORTANTE: codificar el script en UTF-8 para evitar errores

from datetime import date, datetime

#OBJETO DATE

print("Fecha actual:", date.today())
print("Día del mes:", date.today().day)
print("Mes del año:", date.today().month)
print("Año:", date.today().year)
print("Día de la semana:", date.today().weekday())

mes = {1:"Enero",2:"Febrero",3:"Marzo",4:"Abril",5:"Mayo",6:"Junio",7:"Julio",8:"Agosto",9:"Septiembre",10:"Octubre",11:"Noviembre",12:"Diciembre"}

dia_semana = {0:"lunes",1:"martes",2:"miércoles",3:"jueves",4:"viernes",5:"sábado",6:"domingo"}

fecha = "Hoy " + dia_semana[date.today().weekday()] + " " + str(date.today().day) + " de " + mes[date.today().month] + " del " + str(date.today().year)
print("Fecha actual:", fecha)

print()
print()

#OBJETO DATETIME

print("Fecha y hora actual:", datetime.now())
print("Segundos actuales:", datetime.now().second)
print("Minutos actuales:", datetime.now().minute)
print("Hora actual:", datetime.now().hour)
print("Microsegundos actuales:", datetime.now().microsecond)

#strftime(string)

#DIRECTIVAS
#Fecha
# %Y : año con 4 digitos
# %m : mes con dos digitos
# %d : día con dos digitos

#Hora
# %H : Hora con formato 24 horas y dos dígitos
# %M : Minutos actuales con dos dígitos
# %S : Segundos actuales con dos dígitos

print(datetime.now().strftime("%d-%m-%Y %H:%M:%S"))