tiempo temporizador struct_time libreria hacer descargar cronometro contador como python

temporizador - time struct_time python



¿Hay una función inversa para time.gmtime() que analiza una tupla UTC en segundos desde la época? (4)

Siempre pensé que los módulos de hora y fecha eran un poco incoherentes. De todos modos, aquí está el inverso de mktime

import time def mkgmtime(t): """Convert UTC tuple to seconds since Epoch""" return time.mktime(t)-time.timezone

El módulo de tiempo de python parece un poco fortuito. Por ejemplo, aquí hay una lista de métodos, desde la docstring:

time() -- return current time in seconds since the Epoch as a float clock() -- return CPU time since process start as a float sleep() -- delay for a number of seconds given as a float gmtime() -- convert seconds since Epoch to UTC tuple localtime() -- convert seconds since Epoch to local time tuple asctime() -- convert time tuple to string ctime() -- convert time in seconds to string mktime() -- convert local time tuple to seconds since Epoch strftime() -- convert time tuple to string according to format specification strptime() -- parse string to time tuple according to format specification tzset() -- change the local timezone

Mirando localtime () y su mktime inverso (), ¿por qué no hay inversa para gmtime ()?

Preguntas de bonificación: ¿cómo nombrarías el método? ¿Cómo lo implementarías?


Solo soy un novato en Python, pero este es mi enfoque.

def mkgmtime(fields): now = int(time.time()) gmt = list(time.gmtime(now)) gmt[8] = time.localtime(now).tm_isdst disp = now - time.mktime(tuple(gmt)) return disp + time.mktime(fields)

Allí, mi nombre propuesto para la función también. :-) Es importante volver a calcular disp cada vez, en caso de que cambie el valor de ahorro de luz natural o similar. (La conversión de nuevo a tupla es necesaria para Jython. CPython no parece necesitarla).

Esto es super ick, porque time.gmtime establece el indicador DST en falso, siempre. Odio el código, sin embargo. Tiene que haber una mejor manera de hacerlo. Y probablemente haya algunos casos de esquina que aún no tengo.


La documentación de mktime es un poco engañosa aquí, no tiene sentido decir que se calcula como hora local, en lugar de calcular los segundos de Epoch de acuerdo con la tupla suministrada, independientemente de la localidad de su computadora.

Si desea hacer una conversión de utc_tuple a la hora local, puede hacer lo siguiente:

>>> time.ctime(time.time()) ''Fri Sep 13 12:40:08 2013'' >>> utc_tuple = time.gmtime() >>> time.ctime(time.mktime(utc_tuple)) ''Fri Sep 13 10:40:11 2013'' >>> time.ctime(time.mktime(utc_tuple) - time.timezone) ''Fri Sep 13 12:40:11 2013''


Quizás una pregunta más precisa sería cómo convertir un utc_tuple a local_tuple . Yo lo llamaría gm_tuple_to_local_tuple (prefiero nombres largos y descriptivos):

>>> time.localtime(time.mktime(utc_tuple) - time.timezone) time.struct_time(tm_year=2013, tm_mon=9, tm_mday=13, tm_hour=12, tm_min=40, tm_sec=11, tm_wday=4, tm_yday=256, tm_isdst=1)


Validación:

>>> time.ctime(time.mktime(time.localtime(time.mktime(utc_tuple) - time.timezone))) ''Fri Sep 13 12:40:11 2013''

Espero que esto ayude, ilia.


En realidad, hay una función inversa, pero por alguna razón extraña, está en el módulo de calendario: calendar.timegm (). Enumeré las funciones en esta respuesta .