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.