Dönem zamanını tarih saatine dönüştürme


303

Geri kalanından yanıt alıyorum gibi bir Epoch zaman biçimi

start_time = 1234566
end_time = 1234578

MySQL veritabanımdaki farklılıkları saklayabilmem için bu dönemi saniye MySQL formatında dönüştürmek istiyorum.

Denedim:

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

Yukarıdaki sonuç beklediğim şey değil. Bunun gibi olmasını istiyorum

2012-09-12 21:00:00

Lütfen bunu nasıl başarabileceğimi önerin.

Ayrıca, neden alıyorum TypeError: a float is requirediçin

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

Emin 1347516459425misin? Bu geçerli bir dönem değil. time.gmtime(float(str(i)[:-6]+'.'+str(i)[-6:]))Nerede iolduğunu deneyin 1347516459425.
Burhan Khalid

@Burhan Bunun geçerli bir dönem olmadığını nasıl buldunuz?
user1667633

2
Çünkü bir Çağ sadece ~ 10¹⁰ aralığındadır. Time.ctime (1347516459.425) kullanmayı deneyin, bu size 13 Eylül 12 verecektir. Ondalıklara dikkat edin.
Pax Vobiscum

7
Unix Zamanı demek istediğiniz zaman "epoch time" demeyi bırakın . Olmuştur hesaplamada kullanılan birçok farklı çağlardan .
Matt Johnson-Pint

Eskiden epoch = unix = posix alırdım ... bunu işaret ettiğiniz için teşekkürler.
Ben

Yanıtlar:


354

Zaman değerinizi (float veya int) biçimlendirilmiş bir dizeye dönüştürmek için şunu kullanın:

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' neden?
user1667633

3
Örneğinizde "1347517491247" zamanı nereden geldi? Kullandığınız gerçek zamanlı bir değer mi?
ron rothman

aslında bigbluebutton sunucusundan bu değeri alıyorum
user1667633

20
time.strftime ('% Y-% m-% d% H:% M:% S', time.localtime (1347517491.247)) '2012-09-13 08:24:51' Değeriniz ms cinsinden dönem
MatthieuW

1
dize biçiminde daha fazla bilgi için docs.python.org/2/library/time.html#time.strftime adresine bakın
georg

221

Ayrıca şunları kullanabilirsiniz datetime:

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

3
hangi saat diliminde bu dönüşümü yapar, ya belirli bir saat diliminde olmak istersem. ?
garg10may

4
@ garg10may dönem zamanı her zaman UTC ofseti 0'dır, bu nedenle dize UTC ofseti 0 olur. Bu Zulu saat dilimine (+00: 00) eşittir. Daha fazla bilgiyi
Devnetics

6
Python 3'te UTC saatini almak için 'utcfromtimestamp' işlevi var
vwvolodya

Bu yanıtı kullanmanın avantajı, strftime()daha fazla biçimlendirici yer tutucunun datetime sürümünün , özellikle zamanın mikrosaniye kısmı için% f'yi desteklemesidir. Bilinmeyen nedenlerden dolayı time.strftime(), mikrosaniyelerin girilen şamandıra değerinde temsil edilebilmesine rağmen , bunu desteklemez 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

UTC almak için:

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

doc diyor ki eski
qrtLs

14

İhtiyacın olan şey bu

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'

Lütfen floatyerine bir girin intve diğeri TypeErrorde gitmelidir.

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

10

Bunu dene:

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

Ayrıca MySQL'de şunları yapabilirsiniz FROM_UNIXTIME:

INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))

2. sorunuz için, bunun nedeni muhtemelen getbbb_class.end_timebir dize olmasıdır. Aşağıdakine benzer bir sayıya dönüştürebilirsiniz: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)

Bu biraz daha garip ama unix'te date komutundan geliyor.


3

İlk önce adam gmtime çağında bilgi

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

çağın nasıl olması gerektiğini anlamak için.

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

ilettiğiniz bağımsız değişkenin time.gmtime()tamsayı olduğundan emin olun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.