Dominando fechas y horas en Python: Guía práctica
Un programa Python puede manejar fecha y hora de varias formas. Convertir entre formatos de fecha es una tarea común. Los módulos time y calendar de Python ayudan a rastrear fechas y horas.
¿Qué es Tick?
Los intervalos de tiempo son números de punto flotante en unidades de segundos. Instantes particulares se expresan en segundos desde las 00:00:00 hrs del 1 de enero de 1970 (epoch).
El popular módulo time proporciona funciones para trabajar con tiempos y convertir entre representaciones. La función time.time() devuelve la hora actual del sistema en ticks desde el epoch.
Ejemplo
Demo en vivo#!/usr/bin/python import time ticks = time.time() print "Número de ticks desde 12:00am, 1 enero 1970:", ticks
Resultado típico:
Número de ticks desde 12:00am, 1 enero 1970: 7186862.73399
La aritmética de fechas es fácil con ticks. Sin embargo, fechas antes del epoch no pueden representarse así. Fechas muy futuras tampoco - el límite es alrededor de 2038 para UNIX y Windows.
¿Qué es TimeTuple?
Muchas funciones de time manejan el tiempo como tupla de 9 números:
| Índice | Campo | Valores |
|---|---|---|
| 0 | Año 4 dígitos | 2008 |
| 1 | Mes | 1 a 12 |
| 2 | Día | 1 a 31 |
| 3 | Hora | 0 a 23 |
| 4 | Minuto | 0 a 59 |
| 5 | Segundo | 0 a 61 (60 o 61 son segundos intercalares) |
| 6 | Día de semana | 0 a 6 (0 es lunes) |
| 7 | Día del año | 1 a 366 (día juliano) |
| 8 | Ahorro de luz diurna | -1, 0, 1, -1 significa que la librería determina DST |
Esta tupla equivale a la estructura struct_time con atributos:
| Índice | Atributos | Valores |
|---|---|---|
| 0 | tm_year | 2008 |
| 1 | tm_mon | 1 a 12 |
| 2 | tm_mday | 1 a 31 |
| 3 | tm_hour | 0 a 23 |
| 4 | tm_min | 0 a 59 |
| 5 | tm_sec | 0 a 61 |
| 6 | tm_wday | 0 a 6 (0 es lunes) |
| 7 | tm_yday | 1 a 366 |
| 8 | tm_isdst | -1, 0, 1, -1 significa librería determina DST |
Obtener hora actual
Para convertir un instante desde segundos desde epoch a time-tuple, pasa el valor a función (ej. localtime) que devuelve time-tuple con 9 items válidos.
Demo en vivo#!/usr/bin/python import time hora_local = time.localtime(time.time()) print "Hora local actual:", hora_local
Resultado (formateable):
Hora local actual: time.struct_time(tm_year=2013, tm_mon=7, tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)
Obtener hora formateada
Forma simple de obtener hora legible es asctime():
Demo en vivo#!/usr/bin/python import time hora_local = time.asctime(time.localtime(time.time())) print "Hora local actual:", hora_local
Resultado:
Hora local actual: Tue Jan 13 10:17:09 2009
Obtener calendario para un mes
El módulo calendar da métodos para calendarios anuales y mensuales. Imprimimos calendario para enero 2008:
Demo en vivo#!/usr/bin/python import calendar cal = calendar.month(2008, 1) print "Aquí está el calendario:" print cal
Resultado:
Aquí está el calendario: January 2008 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
El módulo time
Métodos disponibles en el módulo time:
| Nº | Función con descripción |
|---|---|
| 1 | time.altzone - Offset de zona horaria DST local en segundos al oeste de UTC. |
| 2 | time.asctime([tuplatiempo]) - Acepta time-tuple y devuelve string legible de 24 caracteres. |
| 3 | time.clock() - Tiempo CPU actual como float. Útil para medir costos computacionales. |
| 4 | time.ctime([segundos]) - Como asctime(localtime(segundos)). |
| 5 | time.gmtime([segundos]) - Time-tuple con hora UTC. tm_isdst siempre 0. |
| 6 | time.localtime([segundos]) - Time-tuple con hora local. |
| 7 | time.mktime(tuplatiempo) - Convierte time-tuple local a segundos desde epoch. |
| 8 | time.sleep(segundos) - Suspende hilo por segundos. |
| 9 | time.strftime(fmt[,tuplatiempo]) - Formatea instante según string fmt. |
| 10 | time.strptime(str, fmt='%a %b %d %H:%M:%S %Y') - Parsea string según formato. |
| 11 | time.time() - Instante actual, float segundos desde epoch. |
| 12 | time.tzset() - Reinicia reglas de conversión de hora. Variable TZ especifica cómo. |
Atributos importantes del módulo time:
| Nº | Atributo con descripción |
|---|---|
| 1 | time.timezone - Offset en segundos de zona local (sin DST) desde UTC. |
| 2 | time.tzname - Par de strings dependientes de locale: nombres de zona sin y con DST. |
El módulo calendar
El módulo calendar provee funciones relacionadas con calendarios, incluyendo impresión de calendario textual para mes o año dado.
Por defecto, calendar toma lunes como primer día de semana y domingo como último. Para cambiar, usa calendar.setfirstweekday().
Funciones disponibles en calendar:
| Nº | Función con descripción |
|---|---|
| 1 | calendar.calendar(año,w=2,l=1,c=6) - String multilínea con calendario del año. |
| 2 | calendar.firstweekday() - Configuración actual del día que inicia la semana (0=lunes). |
| 3 | calendar.isleap(año) - True si año bisiesto, False en caso contrario. |
| 4 | calendar.leapdays(y1,y2) - Total días bisiestos en range(y1,y2). |
| 5 | calendar.month(año,mes,w=2,l=1) - String multilínea con calendario del mes. |
| 6 | calendar.monthcalendar(año,mes) - Lista de listas de ints (semanas). |
| 7 | calendar.monthrange(año,mes) - Dos enteros: código día semana primer día y días del mes. |
| 8 | calendar.prcal(año,w=2,l=1,c=6) - Como print calendar.calendar(). |
| 9 | calendar.prmonth(año,mes,w=2,l=1) - Como print calendar.month(). |
| 10 | calendar.setfirstweekday(día_semana) - Establece primer día de semana (0=lunes a 6=domingo). |
| 11 | calendar.timegm(tuplatiempo) - Inverso de time.gmtime: time-tuple a segundos desde epoch. |
| 12 | calendar.weekday(año,mes,día) - Código día semana para fecha dada (0=lunes, 6=domingo). |
Otros módulos y funciones
Si te interesa, aquí hay otros módulos importantes para fecha y hora:
El módulo datetime
El módulo pytz
El módulo dateutil
python
- Dominando tipos de datos en Python: Guía práctica
- Dominando operadores en Python: Guía completa
- Dominando la sentencia pass en Python: Guía práctica
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
- Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
- Obtener la Fecha y Hora Actual en Python: Guía Práctica
- Python: Obtener Hora Actual y Datos de Zona Horaria Fácilmente
- Dominar el Módulo time de Python: Funciones, Structs y Ejemplos Prácticos
- Dominar time.sleep() en Python: Mejores Prácticas, Multihilo y Ejemplos Reales
- Dominando Fecha y Hora en Java: Constructores, Métodos y Mejores Prácticas