2011-11-23 21 views
8

de Python datetime tiene un método fromtimestamp para crear un objeto datetime de una marca de tiempo, pero no proporciona un método para totimestamp al revés ... Soy consciente de que con algo como time.mktime(x.timetuple()) se puede convertir el objeto datetime a una marca de tiempo, pero esto parece innecesario complicado para mí, entonces tengo curiosidad por qué no hay un método totimestamp?¿Por qué la clase python datetime tiene un método 'fromtimestamp', pero no un método 'totimestamp'? clase

+0

Véase también http://stackoverflow.com/questions/8022161/python-converting-from-datetime -datetime-to-time-time –

+0

@Sven: Mi pregunta no se trata de pedir métodos para convertirla, sino de querer saber el motivo de la ausencia de dicho método en el módulo 'datetime' ... –

+1

No lo hice No digas que esto es un duplicado. Acabo de vincular información relacionada, que siempre es útil para las personas que acceden a esta página desde Google. –

Respuesta

13

Recuerdo un discussion/bug report acerca de esto mientras me preguntaba sobre esto hace algún tiempo. Para resumir: se hicieron muchas propuestas, pero por alguna razón, ninguna ha sido aceptada.

El punto es que creo que mejor resume en this reply:

Mucho han propuesto una solución satisfactoria. Nadie ha encontrado una solución que sea satisfactoria para usted, porque ha restringido demasiado el problema. La razón por la que todavía no tenemos utctotimestamp() después de todos estos años es que usted, y solo hasta donde yo sé, se niega a aceptar un método que invierta utcfromtimestamp() con una precisión de microsegundos sobre su rango de trabajo. Tal método es una solución perfectamente razonable y aceptable y agregaría mucho valor a Python como lenguaje.

Sospecho que no se da cuenta de cuánto dolor ha causado involuntariamente al mundo de los usuarios de Python bloqueando de forma única el progreso en este tema. Los he visto: estudiantes, amigos, compañeros de trabajo; incluso personas muy inteligentes y capaces se sienten frustradas. Nadie piensa en buscar en el módulo de calendario. Tal vez si veías a algunos de ellos luchar con esto, lo entenderías.

El resultado final de esta historia fue que documentation was added sobre cómo hacerlo usted mismo:

# On the POSIX compliant platforms, `utcfromtimestamp(timestamp)` is 
# equivalent to the following expression: 
datetime(1970, 1, 1) + timedelta(seconds=timestamp) 

# There is no method to obtain the timestamp from a `datetime` instance, 
# but POSIX timestamp corresponding to a `datetime` instance `dt` can be 
# easily calculated as follows. For a naive `dt`: 
timestamp = (dt - datetime(1970, 1, 1))/timedelta(seconds=1) 

# And for an aware ``dt``:: 
timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc))/timedelta(seconds=1) 
Cuestiones relacionadas