[Python] Tutoriales de la serie avanzada de Python: fecha y hora de Python3 (10)

prefacio

Revisión pasada:

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

Python proporciona un módulo de tiempo y calendario que se puede usar para formatear fechas y horas.

El intervalo de tiempo es una fracción de coma flotante de segundos.

Cada marca de tiempo se expresa en términos de cuánto tiempo ha transcurrido desde la medianoche del 1 de enero de 1970 (época).

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

ejemplo

#!/usr/bin/python3

import time  # 引入time模块

ticks = time.time()
print ("当前时间戳为:", ticks)

La salida del ejemplo anterior:

当前时间戳为: 1459996086.7115328

Las unidades de marca de tiempo son las más adecuadas para la aritmética de fechas. Pero las fechas anteriores a 1970 no pueden expresarse de esta manera. Las fechas demasiado lejanas tampoco funcionarán, UNIX y Windows solo son compatibles hasta 2038.

¿Qué es una tupla de tiempo?

Muchas funciones de Python procesan el tiempo con grupos de 9 números ensamblados por un elemento:

número de serie campo valor
0 año de 4 dígitos 2008
1 luna 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 es un segundo bisiesto)
6 día de la semana 0 a 6 (0 es lunes)
7 que dia del año 1 a 366 (calendario juliano)
8 Hora de verano -1, 0, 1, -1 es la bandera para determinar si es el horario de verano

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

número de serie campo valor
0 tm_año 2008
1 tm_mon 1 a 12
2 tm_mday 1 a 31
3 tm_hora 0 a 23
4 tm_min 0 a 59
5 tm_sec
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 horario de verano), -1 (desconocido), predeterminado -1

obtener la hora actual

Para convertir una marca de tiempo que devuelve un flotante a una tupla de tiempo, simplemente pase el flotante a una función como localtime.

#!/usr/bin/python3

import time

localtime = time.localtime(time.time())
print ("本地时间为 :", localtime)

La salida del ejemplo anterior:

本地时间为 : 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 hora formateada

Puede elegir cualquier formato según sus necesidades, pero la función más sencilla para obtener un patrón de tiempo legible por humanos es asctime():

#!/usr/bin/python3

import time

localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)

La salida del ejemplo anterior:

本地时间为 : Thu Apr  7 10:29:13 2016

fecha de formato

Podemos formatear fechas usando el método strftime del módulo de tiempo:

time.strftime(format[, t])

ejemplo

#!/usr/bin/python3

import time

# 格式化成2016-03-20 11:45:39形式
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# 格式化成Sat Mar 28 22:24:24 2016形式
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
 
# 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print (time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))

La salida del ejemplo anterior:

2016-04-07 10:29:46
Thu Apr 07 10:29:46 2016
1459175064.0

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

  • Representación de %y año de dos dígitos (00-99)
  • %Y representación de año de cuatro dígitos (000-9999)
  • %m mes (01-12)
  • %d día del mes (0-31)
  • %H Horas en formato de 24 horas (0-23)
  • %I Horas en formato de 12 horas (01-12)
  • %M minutos (00=59)
  • %S segundos (00-59)
  • %a nombre de día de la semana abreviado local
  • %Un nombre local completo del día de la semana
  • %b nombre de mes abreviado local
  • Nombre completo del mes local de %B
  • %c Representación de fecha y hora local correspondiente
  • %j día del año (001-366)
  • %p equivalente a AM o PM local
  • %U número de semana del año (00-53) El domingo es el comienzo de la semana
  • %w semana (0-6), el domingo es el comienzo de la semana
  • %W número de semana del año (00-53) El lunes es el comienzo de la semana
  • %x representación de fecha local correspondiente
  • %X representación horaria local correspondiente
  • %Z el nombre de la zona horaria actual
  • %% % se firma a sí mismo

Obtener un calendario mensual

El módulo Calendario tiene una amplia gama de métodos para trabajar con calendarios anuales y mensuales, como imprimir un calendario para un mes determinado:

ejemplo

#!/usr/bin/python3

import calendar

cal = calendar.month(2016, 1)
print ("以下输出2016年1月份的日历:")
print (cal)

La salida del ejemplo anterior:

以下输出20161月份的日历:
    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 de tiempo

El módulo Hora contiene las siguientes funciones integradas, tanto para la manipulación de la hora como para la conversión de formatos de hora:

número de serie función y descripción ejemplo
1 time.altzone
devuelve el desplazamiento en segundos para la zona horaria de ahorro de luz diurna al oeste de Greenwich. Se devuelven valores negativos si la región está al este de Greenwich (por ejemplo, Europa occidental, incluido el Reino Unido). Para usarse en regiones donde el horario de verano está habilitado.
El siguiente ejemplo muestra cómo usar la función altzone():
>>> import time
>>> print ("time.altzone %d " % time.altzone)
time.altzone -28800
2 time.asctime([tupletime])
toma una tupla de tiempo y devuelve una forma legible de 24 caracteres de "Tue Dec 11 18:07:14 2008" String.
El siguiente ejemplo muestra cómo usar la función asctime():
>>> import time
>>> t = time.localtime()
>>> print ("time.asctime(t): %s " % time.asctime(t ) )time.asctime(t): Jue 7 de abril 10:36:20 2016
3 time.clock()
devuelve el tiempo actual de la CPU en segundos como un número de coma flotante. Se usa para medir el tiempo que consumen diferentes programas, más útil que time.time().
Ejemplo
Debido a que este método depende del sistema operativo, no se recomienda después de Python 3.3, pero se eliminó en la versión 3.8 y, en su lugar, se deben usar las siguientes dos funciones.
time.perf_counter() # Devuelve el tiempo de ejecución del sistema
time.process_time() # Devuelve el tiempo de ejecución del proceso
4 time.ctime([secs])
es equivalente a asctime(localtime(secs)), si no se proporciona ningún parámetro, es equivalente a asctime()
El siguiente ejemplo muestra cómo usar 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])
toma una marca de tiempo (float segundos transcurridos desde la época de 1970) y devuelve una tupla de tiempo t en la hora del meridiano de Greenwich. Nota: t.tm_isdst siempre es 0
El siguiente ejemplo muestra cómo usar 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_hora=3, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
6 time.localtime([secs]
接收时间戳(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
以下实例展示了 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)
接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)。
8 time.sleep(secs)
推迟调用线程的运行,secs指秒数。
以下实例展示了 sleep()函数的使用方法:
#!/usr/bin/python3
import time
print (“Start : %s” % time.ctime())
time.sleep( 5 )
print (“End : %s” % time.ctime())
9 time.strftime(fmt[,tupletime])
接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
以下实例展示了 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’)
根据fmt的格式把一个时间字符串解析为时间元组。
以下实例展示了 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( )
返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
以下实例展示了 time()函数的使用方法:
>>> import time
>>> print(time.time())1459999336.1963577
12 time.tzset()
根据环境变量TZ重新初始化时间相关设置。
-
13 time.perf_counter()
返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
-
14 time.process_time()
返回当前进程执行 CPU 的时间总和,不包含睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
-

Time模块包含了以下2个非常重要的属性:

序号 属性及描述
1 time.timezone
属性time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。
2 time.tzname
属性time.tzname包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。

日历(Calendar)模块

此模块的函数都是日历相关的,例如打印某月的字符月历。

星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。模块包含了以下内置函数:

序号 属性及描述
1 calendar.calendar(year,w=2,l=1,c=6)
返回一个多行字符串格式的 year 年年历,3 个月一行,间隔距离为 c。 每日宽度间隔为w字符。每行长度为 21* W+18+2* C。l 是每星期行数。
2 calendar.firstweekday( )
返回当前每周起始日期的设置。默认情况下,首次载入 calendar 模块时返回 0,即星期一。
3 calendar.isleap(year)
是闰年返回 True,否则为 False。
>>> import calendar
>>>print(calendar.isleap(2000))
True
>>> print(calendar.isleap(1900))
False
4 calendar.leapdays(y1,y2)
返回在Y1,Y2两年之间的闰年总数。
5 calendar.month(year,month,w=2,l=1)
返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
6 calendar.monthcalendar(year,month)
返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
7 calendar.monthrange(year,month)
返回两个整数。第一个是该月的星期几,第二个是该月有几天。星期几是从0(星期一)到 6(星期日)。
>>> import calendar
>>> calendar.monthrange(2014, 11)
(5, 30)
(5, 30)解释:5 表示 2014 年 11 月份的第一天是周六,30 表示 2014 年 11 月份总共有 30 天。
8 calendar.prcal(year, w=0, l=0, c=6, m=3)
相当于 print (calendar.calendar(year, w=0, l=0, c=6, m=3))。
9 calendar.prmonth(theyear, themonth, w=0, l=0)
相当于 print(calendar.month(theyear, themonth, w=0, l=0))。
10 calendar.setfirstweekday(weekday)
设置每周的起始日期码。0(星期一)到6(星期日)。
11 calendar.timegm(tupletime)
和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间戳(1970纪元后经过的浮点秒数)。
12 calendar.weekday(year,month,day)
返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

其他相关模块和函数

在Python中,其他处理日期和时间的模块还有:

time 模块
datetime模块

Supongo que te gusta

Origin blog.csdn.net/u011397981/article/details/131149771
Recomendado
Clasificación