Python Fecha y hora

Los programas de Python pueden manejar fechas y horas de muchas maneras; convertir formatos de fecha es una función común.

Python proporciona un módulo time y un módulo calendar que pueden usarse para formatear fechas y horas.

Los intervalos de tiempo son números de punto flotante en segundos.

Cada marca de tiempo se expresa como la cantidad de tiempo transcurrido desde la medianoche del 1 de enero de 1970 (época).

El módulo time de Python tiene muchas funciones para convertir formatos de fecha comunes. Por ejemplo, la función time.time() se utiliza para obtener la marca de tiempo actual, como en el siguiente ejemplo:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # Introducir el módulo time ticks = time.time() print "La marca de tiempo actual es:", ticks

El resultado del ejemplo anterior es:

当前时间戳为: 1459994552.51

La unidad de marca de tiempo es la más adecuada para realizar operaciones con fechas. Sin embargo, las fechas anteriores a 1970 no pueden representarse de esta manera. Las fechas demasiado lejanas tampoco son posibles; UNIX y Windows solo admiten hasta 2038.



¿Qué es una tupla de tiempo?

Muchas funciones de Python procesan el tiempo utilizando una tupla de 9 grupos de números:

N.ºCampoValor
0Año de 4 dígitos2008
1mes1 a 12
2día1 a 31
3Hora0 a 23
4Minuto0 a 59
5segundo0 a 61 (60 o 61 son segundos intercalares)
6Día de la semana0 a 6 (0 es lunes)
7Día del año1 a 366 (calendario juliano)
8Horario de verano-1, 0, 1, -1 es el indicador que determina si es horario de verano.

Lo anterior es la tupla struct_time. Esta estructura tiene las siguientes propiedades:

N.ºAtributoValor
0tm_year2008
1tm_mon1 a 12
2tm_mday1 a 31
3tm_hour0 a 23
4tm_min0 a 59
5tm_sec0 a 61 (60 o 61 son segundos intercalares)
6tm_wday0 a 6 (0 es lunes)
7tm_yday1 a 366 (calendario juliano)
8tm_isdst-1, 0, 1, -1 es el indicador que determina si es horario de verano.


Obtener la hora actual

Para convertir una marca de tiempo de punto flotante a una tupla de tiempo, basta con pasar el número de punto flotante a funciones como localtime.

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.localtime(time.time()) print "La hora local es:", localtime

El resultado del ejemplo anterior es:

本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98, tm_isdst=0)


Obtener la hora formateada

Puedes elegir varios formatos según tus necesidades, pero la función más simple para obtener un patrón de tiempo legible es asctime():

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.asctime( time.localtime(time.time()) ) print "La hora local es:", localtime

El resultado del ejemplo anterior es:

本地时间为 : Thu Apr  7 10:05:21 2016

Formatear fechas

Podemos usar el método strftime del módulo time para formatear fechas:

time.strftime(format[, t])

Demostración con ejemplo:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # Formatear como 2016-03-20 11:45:39 print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # Formatear como Sat Mar 28 22:24:24 2016 print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) # Convertir la cadena de formato a marca de tiempo a = "Sat Mar 28 22:24:24 2016" print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

El resultado del ejemplo anterior es:

2016-04-07 10:25:09
Thu Apr 07 10:25:09 2016
1459175064.0

Símbolos de formato de fecha y hora en Python:

  • %y Año representado con dos dígitos (00-99)
  • %Y Año representado con cuatro dígitos (000-9999)
  • %m Mes (01-12)
  • %d Día del mes (0-31)
  • %H Hora en formato 24 horas (0-23)
  • %I Hora en formato 12 horas (01-12)
  • %M Minutos (00-59)
  • %S Segundos (00-59)
  • %a Nombre abreviado del día de la semana local
  • %A Nombre completo del día de la semana local
  • %b Nombre abreviado del mes local
  • %B Nombre completo del mes local
  • %c Representación local de fecha y hora correspondiente
  • %j Día del año (001-366)
  • %p Equivalente local de A.M. o P.M.
  • %U Número de semana del año (00-53), el domingo es el primer día de la semana
  • %w Día de la semana (0-6), el domingo es el primer día de la semana
  • %W Número de semana del año (00-53), el lunes es el primer día de la semana
  • %x Representación local de la fecha correspondiente
  • %X Representación local de la hora correspondiente
  • %Z Nombre de la zona horaria actual
  • %% El símbolo de porcentaje en sí

Obtener el calendario de un mes

El módulo Calendar tiene métodos muy variados para manejar calendarios anuales y mensuales, por ejemplo, imprimir el calendario de un mes:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import calendar cal = calendar.month(2016, 1) print "A continuación se muestra el calendario de enero de 2016:" print cal

El resultado del ejemplo anterior es:

以下输出2016年1月份的日历:
    January 2016
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


Módulo Time

El módulo Time incluye las siguientes funciones integradas, tanto para el manejo del tiempo como para convertir formatos de tiempo:

N.ºFunción y descripción
1time.altzone
Devuelve el desplazamiento en segundos de las zonas al oeste de Greenwich con horario de verano. Si la zona está al este de Greenwich, devuelve un valor negativo (como Europa occidental, incluido el Reino Unido). Solo se puede utilizar en regiones donde el horario de verano está habilitado.
2time.asctime([tupletime])
Acepta una tupla de tiempo y devuelve una cadena legible de 24 caracteres con la forma "Tue Dec 11 18:07:14 2008" (martes 11 de diciembre de 2008, 18:07:14).
3time.clock( )
Devuelve el tiempo de CPU actual en segundos calculados como números de punto flotante. Se utiliza para medir el tiempo de ejecución de diferentes programas; es más útil que time.time().
4time.ctime([secs])
Su efecto equivale a asctime(localtime(secs)); sin parámetros equivale a asctime().
5time.gmtime([secs])
Recibe una marca de tiempo (segundos de punto flotante transcurridos desde la época de 1970) y devuelve la tupla de tiempo t en hora astronómica de Greenwich. Nota: t.tm_isdst siempre es 0.
6time.localtime([secs])
Recibe una marca de tiempo (segundos de punto flotante transcurridos desde la época de 1970) y devuelve la tupla de tiempo t en hora local (t.tm_isdst puede ser 0 o 1, dependiendo de si es horario de verano en ese momento y lugar).
7time.mktime(tupletime)
Acepta una tupla de tiempo y devuelve una marca de tiempo (segundos de punto flotante transcurridos desde la época de 1970).
8time.sleep(secs)
Retrasa la ejecución del hilo que realiza la llamada; secs se refiere a los segundos.
9time.strftime(fmt[,tupletime])
Recibe una tupla de tiempo y devuelve la hora local representada como una cadena legible, cuyo formato está determinado por fmt.
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
Analiza una cadena de tiempo en una tupla de tiempo de acuerdo con el formato de fmt.
11time.time( )
Devuelve la marca de tiempo de la hora actual (segundos de punto flotante transcurridos desde la época de 1970).
12time.tzset()
Reinicializa los ajustes relacionados con el tiempo según la variable de entorno TZ.

El módulo Time contiene las siguientes 2 propiedades muy importantes:

N.ºPropiedad y descripción
1time.timezone
La propiedad time.timezone es el desplazamiento en segundos de la zona horaria local (sin horario de verano) respecto a Greenwich (>0 en América, <=0 en la mayor parte de Europa, Asia y África).
2time.tzname
La propiedad time.tzname contiene un par de cadenas que varían según las circunstancias: los nombres de la zona horaria local con y sin horario de verano.


Módulo Calendar (Calendario)

Las funciones de este módulo están relacionadas con calendarios, por ejemplo, imprimir el calendario mensual en caracteres de un mes.

El lunes es el primer día de la semana por defecto, y el domingo es el último día por defecto. Para cambiar esta configuración, se debe llamar a la función calendar.setfirstweekday(). El módulo incluye las siguientes funciones integradas:

N.ºFunción y descripción
1calendar.calendar(year,w=2,l=1,c=6)
Devuelve un calendario anual de year en formato de cadena de varias líneas, con 3 meses por línea y una distancia de separación de c. El ancho diario es de w caracteres. La longitud de cada línea es 21 * W + 18 + 2 * C. l es el número de líneas por semana.
2calendar.firstweekday( )
Devuelve el valor actual de configuración del primer día de la semana. De forma predeterminada, al cargar el módulo calendar por primera vez, devuelve 0, es decir, lunes.
3calendar.isleap(year)

Devuelve True si es un año bisiesto, de lo contrario False.

>>> import calendar
>>> print(calendar.isleap(2000))
True
>>> print(calendar.isleap(1900))
False
4calendar.leapdays(y1,y2)
Devuelve el número total de años bisiestos entre los años Y1 y Y2.
5calendar.month(year,month,w=2,l=1)
Devuelve un calendario del año year y el mes month en formato de cadena de varias líneas, con dos líneas de título, una semana por línea. El ancho diario es de w caracteres. La longitud de cada línea es 7*w+6. l es el número de líneas por semana.
6calendar.monthcalendar(year,month)
Devuelve una lista anidada de un solo nivel de enteros. Cada sublista contiene enteros que representan una semana. Las fechas fuera del año year y el mes month se establecen en 0; los días dentro del rango se representan por el día del mes, comenzando desde 1.
7calendar.monthrange(year,month)
Devuelve dos enteros. El primero es el código de fecha del día de la semana del mes; el segundo es el código de fecha del mes. Los días van de 0 (lunes) a 6 (domingo); los meses de 1 a 12.
8calendar.prcal(year,w=2,l=1,c=6)
Equivalente aprint calendar.calendar(year,w=2,l=1,c=6)。
9calendar.prmonth(year,month,w=2,l=1)
Equivalente aprint calendar.month(year,month,w=2,l=1) 。
10calendar.setfirstweekday(weekday)
Establece el código de fecha de inicio de cada semana. 0 (lunes) a 6 (domingo).
11calendar.timegm(tupletime)
Opuesto a time.gmtime: acepta una tupla de tiempo y devuelve la marca de tiempo de ese momento (segundos en punto flotante transcurridos desde la época de 1970).
12calendar.weekday(year,month,day)
Devuelve el código de fecha para la fecha dada. 0 (lunes) a 6 (domingo). Los meses van de 1 (enero) a 12 (diciembre).


Otros módulos y funciones relacionados

En Python, otros módulos para manejar fechas y horas son:

Otras extensiones