Python3 Fecha y hora
Los programas Python pueden manejar fechas y horas de muchas maneras; convertir formatos de fecha es una función común.
Python proporciona los módulos time y calendar que se pueden usar 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:
Ejemplos
import time # Introduce el módulo time
ticks = time.time()
print (La marca de tiempo actual es:, ticks)
El resultado del ejemplo anterior es:
当前时间戳为: 1459996086.7115328
La unidad de marca de tiempo es la más adecuada para realizar operaciones de fecha. Pero las fechas anteriores a 1970 no se pueden representar de esta manera. Las fechas demasiado lejanas tampoco funcionan; UNIX y Windows solo admiten hasta 2038.
¿Qué es una tupla de tiempo?
Muchas funciones de Python usan una tupla de 9 grupos de números para procesar el tiempo:
| N.º | Campo | Valor |
|---|---|---|
| 0 | Año de 4 dígitos | 2008 |
| 1 | mes | 1 a 12 |
| 2 | día | 1 a 31 |
| 3 | Hora | 0 a 23 |
| 4 | Minutos | 0 a 59 |
| 5 | segundo | 0 a 61 (60 o 61 son segundos intercalares) |
| 6 | Día de la semana | 0 a 6 (0 es lunes) |
| 7 | Día del año | 1 a 366 (calendario juliano) |
| 8 | Horario 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 los siguientes atributos:
| N.º | Atributo | Valor |
|---|---|---|
| 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 (60 o 61 son segundos intercalares) |
| 6 | tm_wday | 0 a 6 (0 es lunes) |
| 7 | tm_yday | Día del año, 1 a 366 |
| 8 | tm_isdst | Si es horario de verano, los valores son: 1 (horario de verano), 0 (no es horario de verano), -1 (desconocido), por defecto -1 |
Obtener la hora actual
Para convertir de una marca de tiempo de punto flotante a una tupla de tiempo, solo hay que pasar el número de punto flotante a una función como localtime.
#!/usr/bin/python3
import time
localtime = time.localtime(time.time())
print ("本地时间为 :", localtime)
El resultado del ejemplo anterior es:
本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=28, tm_sec=49, 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 hora legible es asctime():
#!/usr/bin/python3
import time
localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)
El resultado del ejemplo anterior es:
本地时间为 : Thu Apr 7 10:29:13 2016
Formatear fechas
Podemos usar el método strftime del módulo time para formatear fechas:
time.strftime(format[, t])
Ejemplos
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:29:46 Thu Apr 07 10:29:46 2016 1459175064.0
Símbolos de formato de fecha y hora en Python:
- %y Representación del año con dos dígitos (00-99)
- %Y Representación del año con cuatro dígitos (000-9999)
- %m Mes (01-12)
- %d Día del mes (0-31)
- %H Hora en formato de 24 horas (0-23)
- %I Hora en formato de 12 horas (01-12)
- %M Minutos (00-59)
- %S Segundos (00-59)
- %a Nombre abreviado local del día de la semana
- %A Nombre completo local del día de la semana
- %b Nombre abreviado local del mes
- %B Nombre completo local del mes
- %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 como primer día de la semana
- %w Día de la semana (0-6), el domingo como primer día de la semana
- %W Número de semana del año (00-53), el lunes como primer día de la semana
- %x Representación local de fecha correspondiente
- %X Representación local de hora correspondiente
- %Z Nombre de la zona horaria actual
- %% El símbolo de porcentaje en sí mismo
Obtener el calendario de un mes
El módulo Calendar tiene una amplia variedad de métodos para procesar calendarios anuales y mensuales, por ejemplo imprimir el calendario de un mes:
Ejemplos
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 contiene las siguientes funciones integradas, tanto para el manejo del tiempo como para la conversión de formatos de tiempo:
| N.º | Función y descripción | Ejemplos |
|---|---|---|
| 1 | time.altzone Devuelve el desplazamiento en segundos de las regiones con horario de verano al oeste de Greenwich. Si la región está al este de Greenwich, devuelve un valor negativo (como Europa occidental, incluido el Reino Unido). Solo se puede usar en regiones donde el horario de verano está habilitado. |
El siguiente ejemplo muestra el uso de la función altzone():
>>> import time
>>> print ("time.altzone %d " % time.altzone)
time.altzone -28800
|
| 2 | time.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" (11 de diciembre de 2008, martes, 18:07:14). |
El siguiente ejemplo muestra el uso de la función asctime():
>>> import time
>>> t = time.localtime()
>>> print ("time.asctime(t): %s " % time.asctime(t))
time.asctime(t): Thu Apr 7 10:36:20 2016
|
| 3 | time.clock() Devuelve el tiempo de CPU actual en segundos calculados como número de punto flotante. Se utiliza para medir el tiempo de consumo de diferentes programas, es más útil que time.time(). |
Debido a que este método depende del sistema operativo, no se recomienda después de Python 3.3 y fue eliminado en la versión 3.8, se deben usar las siguientes dos funciones en su lugar. time.perf_counter() # 返回系统运行时间 time.process_time() # 返回进程运行时间 |
| 4 | time.ctime([secs]) Su función es equivalente a asctime(localtime(secs)); si no se proporcionan parámetros, equivale a asctime(). |
El siguiente ejemplo muestra el uso de la función ctime():
>>> import time
>>> print ("time.ctime() : %s" % time.ctime())
time.ctime() : Thu Apr 7 10:51:58 2016
|
| 5 | time.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 el tiempo medio de Greenwich. Nota: t.tm_isdst siempre es 0. |
El siguiente ejemplo muestra el uso de la función gmtime():
>>> import time
>>> print ("gmtime :", time.gmtime(1455508609.34375))
gmtime : time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=3, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
|
| 6 | time.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 en ese momento la zona local está en horario de verano). |
El siguiente ejemplo muestra el uso de la función localtime():
>>> import time
>>> print ("localtime(): ", time.localtime(1455508609.34375))
localtime(): time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=11, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
|
| 7 | time.mktime(tupletime) Acepta una tupla de tiempo y devuelve la marca de tiempo (segundos de punto flotante transcurridos desde la época de 1970). | Ejemplos |
| 8 | time.sleep(secs) Retrasa la ejecución del hilo que realiza la llamada, secs indica los segundos. |
El siguiente ejemplo muestra el uso de la función sleep():
#!/usr/bin/python3
import time
print ("Start : %s" % time.ctime())
time.sleep( 5 )
print ("End : %s" % time.ctime())
|
| 9 | time.strftime(fmt[,tupletime]) Recibe una tupla de tiempo y devuelve la hora local representada como una cadena legible, cuyo formato está determinado por fmt. |
El siguiente ejemplo muestra el uso de la función strftime():
>>> import time
>>> print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
2016-04-07 11:18:05
|
| 10 | time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') Analiza una cadena de tiempo en una tupla de tiempo según el formato de fmt. |
El siguiente ejemplo muestra el uso de la función strptime():
>>> import time
>>> struct_time = time.strptime("30 Nov 00", "%d %b %y")
>>> print ("返回元组: ", struct_time)
返回元组: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
|
| 11 | time.time( ) Devuelve la marca de tiempo de la hora actual (segundos de punto flotante transcurridos desde la época de 1970). |
El siguiente ejemplo muestra el uso de la función time(): >>> import time >>> print(time.time()) 1459999336.1963577 |
| 12 | time.tzset() Reinicializa la configuración relacionada con el tiempo según la variable de entorno TZ. | Ejemplos |
| 13 |
time.perf_counter() Devuelve el tiempo preciso del temporizador (tiempo de funcionamiento del sistema), incluido el tiempo de suspensión de todo el sistema. Como el punto de referencia del valor de retorno no está definido, solo la diferencia entre los resultados de llamadas sucesivas es válida. | Ejemplos |
| 14 |
time.process_time() Devuelve el tiempo total de CPU ejecutado por el proceso actual, sin incluir el tiempo de suspensión. Como el punto de referencia del valor de retorno no está definido, solo la diferencia entre los resultados de llamadas sucesivas es válida. |
El módulo Time contiene las siguientes 2 propiedades muy importantes:
| N.º | Propiedad y descripción |
|---|---|
| 1 | time.timezone La propiedad time.timezone es el desplazamiento en segundos desde Greenwich de la zona horaria local (sin horario de verano) (>0, América; <=0 la mayor parte de Europa, Asia, África). |
| 2 | time.tzname El atributo time.tzname contiene un par de cadenas que difieren según el caso: el nombre de la zona horaria local con horario de verano y el que no lo tiene. |
Módulo de calendario (Calendar)
Las funciones de este módulo están relacionadas con el calendario, por ejemplo, imprimir el calendario mensual en caracteres de un mes determinado.
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 |
|---|---|
| 1 | calendar.calendar(year,w=2,l=1,c=6) Devuelve un calendario anual del año `year` en formato de cadena de varias líneas, con 3 meses por línea, separados por una distancia de c. El ancho diario es de w caracteres. La longitud de cada línea es21* W+18+2* C。les el número de líneas por semana. |
| 2 | calendar.firstweekday( ) Devuelve la configuración actual del primer día de la semana. Por defecto, al cargar el módulo calendar por primera vez, devuelve 0, es decir, lunes. |
| 3 | calendar.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 |
| 4 | calendar.leapdays(y1,y2) Devuelve el número total de años bisiestos entre los años Y1 y Y2. |
| 5 | calendar.month(year,month,w=2,l=1) Devuelve un calendario del mes `month` del año `year` en formato de cadena de varias líneas, con dos líneas de encabezado y una línea por semana. 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. |
| 6 | calendar.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 mes `month` del año `year` se establecen en 0; los días dentro del mes se representan por el día del mes, comenzando desde 1. |
| 7 | calendar.monthrange(year,month) Devuelve dos enteros. El primero es el día de la semana del primer día del mes, y el segundo es el número de días del mes. Los días de la semana van de 0 (lunes) a 6 (domingo). >>> import calendar >>> calendar.monthrange(2014, 11) (5, 30) (5, 30) explica: 5 indica que el primer día de noviembre de 2014 es sábado, 30 indica que noviembre de 2014 tiene 30 días en total. |
| 8 | calendar.prcal(year, w=0, l=0, c=6, m=3) Equivale a print(calendar.calendar(year, w=0, l=0, c=6, m=3)). |
| 9 | calendar.prmonth(theyear, themonth, w=0, l=0) Equivale aprint(calendar.month(theyear, themonth, w=0, l=0))。 |
| 10 | calendar.setfirstweekday(weekday) Establece el código del primer día de la semana. De 0 (lunes) a 6 (domingo). |
| 11 | calendar.timegm(tupletime) Al contrario de time.gmtime: acepta una tupla de tiempo y devuelve la marca de tiempo de ese momento (el número de segundos flotantes transcurridos desde la época de 1970). |
| 12 | calendar.weekday(year,month,day) Devuelve el código de fecha para la fecha dada. De 0 (lunes) a 6 (domingo). Los meses son del 1 (enero) al 12 (diciembre). |
Otros módulos y funciones relacionados
En Python, otros módulos para manejar fechas y horas son:
Otras extensiones