Mengubah waktu Epoch ke dalam datetime

303

Saya mendapat respons dari yang lain adalah format waktu seperti Epoch

start_time = 1234566
end_time = 1234578

Saya ingin mengkonversi detik itu dalam waktu format MySQL sehingga saya bisa menyimpan perbedaan dalam database MySQL saya.

Saya mencoba:

>>> 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)

Hasil di atas bukan yang saya harapkan. Aku ingin seperti itu

2012-09-12 21:00:00

Tolong sarankan bagaimana saya bisa mencapai ini?

Juga, Mengapa saya mendapatkan TypeError: a float is requireduntuk

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required
pengguna1667633
sumber
Anda yakin tentang itu 1347516459425? Ini bukan zaman yang valid. Coba time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))mana iadalah 1347516459425.
Burhan Khalid
@ Burhan Bagaimana Anda menemukan bahwa ini bukan zaman yang valid?
user1667633
2
Karena Epoch hanya dalam kisaran ~ 10¹⁰. Coba gunakan time.ctime (1347516459.425), ini akan memberi Anda 13 Sep 12 '. Pikiran desimal.
Pax Vobiscum
7
Tolong berhenti menyebutnya "zaman" ketika Anda maksud Waktu Unix . Ada banyak zaman berbeda yang digunakan dalam komputasi .
Matt Johnson-Pint
Saya biasa mengambil epoch = unix = posix ... terima kasih telah menunjukkan itu.
Ben

Jawaban:

354

Untuk mengonversi nilai waktu Anda (float atau int) ke string yang diformat, gunakan:

time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
ron rothman
sumber
3
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491247)) '44671-02-17 11:44:07' mengapa?
user1667633
3
Dari mana datangnya "1347517491247" dalam contoh Anda? Apakah ini nilai waktu nyata yang Anda gunakan?
ron rothman
sebenarnya saya mendapatkan nilai itu dari server
bigbluebutton
20
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491.247)) '2012-09-13 08:24:51' Nilai Anda adalah waktu dalam ms
MatthieuW
1
lihat docs.python.org/2/library/time.html#time.strftime untuk info lebih lanjut dalam format string
georg
221

Anda juga dapat menggunakan datetime:

>>> import datetime
>>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
  '2012-09-13 02:22:50'
png
sumber
3
di mana zona waktu ini mengkonversi, bagaimana jika saya ingin berada di zona waktu tertentu. ?
garg10mungkin
4
@ garg10mungkin waktu zaman selalu UTC mengimbangi 0, jadi string juga akan menjadi UTC mengimbangi 0. Ini sama dengan zona waktu Zulu (+00: 00). Anda dapat membaca lebih lanjut di sini: timeanddate.com/time/zones/z
Devnetics
6
Ada fungsi 'utcfromtimestamp' untuk mendapatkan waktu UTC dengan python 3.
vwvolodya
Keuntungan menggunakan jawaban ini adalah bahwa versi datetime strftime()mendukung lebih banyak placeholder pemformatan, terutama% f untuk bagian waktu mikrodetik. Untuk alasan yang tidak diketahui, time.strftime()tidak mendukung hal itu, meskipun mikrodetik dapat direpresentasikan dalam nilai float yang dimasukkan 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

Untuk mendapatkan UTC:

>>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
  '2012-09-13 06:22:50'
pengguna799188
sumber
doc mengatakan itu lebih suka bekas
qrtLs
14

Ini yang kamu butuhkan

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'

Silakan masukan floatbukan intdan bahwa yang lain TypeErrorharus pergi.

mend = time.gmtime(float(getbbb_class.end_time)).tm_hour
ronak
sumber
10

Coba ini:

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

Juga di MySQL, Anda dapat FROM_UNIXTIMEmenyukai:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

Untuk pertanyaan ke-2 Anda, mungkin karena getbbb_class.end_timestring. Anda dapat mengubahnya menjadi angka seperti:float(getbbb_class.end_time)

dkamins
sumber
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)

Ini sedikit lebih bertele-tele tetapi berasal dari perintah tanggal di unix.

pengguna2899300
sumber
3

Pertama sedikit info dalam zaman dari 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).

untuk memahami bagaimana zaman seharusnya.

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

hanya pastikan arg yang Anda berikan time.gmtime()adalah integer.

tuxuday
sumber