Convertir la hora de la época en fecha y hora


303

Recibo una respuesta del resto es un formato de hora de época como

start_time = 1234566
end_time = 1234578

Quiero convertir esos segundos de época en tiempo de formato MySQL para poder almacenar las diferencias en mi base de datos MySQL.

Lo intenté:

>>> import time
>>> time.gmtime(123456)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=10, tm_min=17, tm_sec=36, tm_wday=4, tm_yday=2, tm_isdst=0)

El resultado anterior no es lo que estoy esperando. Quiero que sea como

2012-09-12 21:00:00

Por favor sugiera cómo puedo lograr esto?

Además, ¿por qué estoy TypeError: a float is requiredbuscando

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required

¿Estás seguro 1347516459425? Esta no es una época válida. Intenta time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))donde iestá 1347516459425.
Burhan Khalid

@Burhan ¿Cómo descubriste que esta no es una Época válida?
user1667633

2
Porque una época solo está en el rango de ~ 10¹⁰. Intente usar time.ctime (1347516459.425), esto le dará el 13 de septiembre del 12. Cuidado con el decimal.
Pax Vobiscum

77
Por favor, deja de llamarlo "tiempo de época" cuando te refieres a Unix Time . Ha habido muchas épocas diferentes utilizadas en informática .
Matt Johnson-Pint

Solía ​​tomar epoch = unix = posix ... gracias por señalarlo.
Ben

Respuestas:


354

Para convertir su valor de tiempo (float o int) en una cadena con formato, use:

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))

3
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491247)) '44671-02-17 11:44:07' ¿por qué?
user1667633

3
¿De dónde vino el tiempo "1347517491247" en tu ejemplo? ¿Es un valor en tiempo real lo que estás usando?
Ron Rothman

En realidad estoy consiguiendo que el valor del servidor BigBlueButton
user1667633

20
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491.247)) '2012-09-13 08:24:51' Su valor es época en ms
MatthieuW

1
ver docs.python.org/2/library/time.html#time.strftime para más información en la cadena de formato
georg

221

También puedes usar datetime:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'

3
en qué zona horaria convierte esto, ¿y si quiero estar en una zona horaria específica? ?
garg10may

44
@ garg10may el tiempo de época siempre es el desplazamiento UTC 0, por lo que la cadena también sería el desplazamiento UTC 0. Esto es equivalente a la zona horaria zulú (+00: 00). Puede leer más aquí: timeanddate.com/time/zones/z
Devnetics

66
Hay una función 'utcfromtimestamp' para obtener la hora UTC en python 3.
vwvolodya

La ventaja de usar esta respuesta es que la versión de fecha y hora strftime()admite más marcadores de posición de formato, particularmente% f para la porción de microsegundos de la hora. Por razones desconocidas, time.strftime()no admite eso, aunque los microsegundos se pueden representar en el valor flotante al que se ingresa time.localtime().
Andreas Maier

60
>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
'2012-09-13 14:22:50' # Local time

Para obtener UTC:

>>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
  '2012-09-13 06:22:50'

doc dice que prefiere ex
qrtLs

14

Esto es lo que necesitas

In [1]: time.time()
Out[1]: 1347517739.44904

In [2]: time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
Out[2]: '2012-09-13 06:31:43'

Ingrese un en floatlugar de un inty ese otro TypeErrordebería desaparecer.

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour

10

Prueba esto:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(1347517119))
'2012-09-12 23:18:39'

También en MySQL, puede FROM_UNIXTIMEgustar:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

Para su segunda pregunta, probablemente sea porque getbbb_class.end_timees una cadena. Puede convertirlo a numérico como:float(getbbb_class.end_time)


8
#This adds 10 seconds from now.
from datetime import datetime
import commands

date_string_command="date +%s"
utc = commands.getoutput(date_string_command)
a_date=datetime.fromtimestamp(float(int(utc))).strftime('%Y-%m-%d %H:%M:%S')
print('a_date:'+a_date)
utc = int(utc)+10
b_date=datetime.fromtimestamp(float(utc)).strftime('%Y-%m-%d %H:%M:%S')
print('b_date:'+b_date)

Esto es un poco más prolijo, pero proviene del comando date en unix.


3

Primero un poco de información en época de man gmtime

The ctime(), gmtime() and localtime() functions all take an argument of data type time_t which represents calendar  time.   When  inter-
       preted  as  an absolute time value, it represents the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal
       Time (UTC).

para entender cómo debería ser la época.

>>> time.time()
1347517171.6514659
>>> time.gmtime(time.time())
(2012, 9, 13, 6, 19, 34, 3, 257, 0)

solo asegúrate de que el argumento al que estás pasando time.gmtime()sea ​​entero.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.