Gmtime () zaman + tarih çıktısından dönemden bu yana saniye nasıl alınır?


162

gmtime()Zamanı + tarihi koyduğunuz ve saniye sayısını alacağınız yeri nasıl tersine çevirirsiniz ?

Benim gibi dizeleri var 'Jul 9, 2009 @ 20:02:58 UTC', ve 9 Temmuz 2009 dönemi arasındaki saniye sayısını geri almak istiyorum.

Denedim time.strftimeama nasıl düzgün kullanılacağını bilmiyorum ya da kullanmak için doğru komut ise.

Yanıtlar:


123

Bir arama motoru Unix zaman damgasını nasıl alacağınızı söylediğinden buraya geldiyseniz, bu yanıtı okumayı bırakın. Aşağı kaydırın.

Eğer tersini time.gmtime()yapmak istiyorsan, istiyorsun calendar.timegm().

>>> calendar.timegm(time.gmtime())
1293581619.0

Dizenizi time.strptime()bir zaman grubuna dönüştürebilirsiniz; bu, geçirebileceğiniz bir zaman grubunu döndürür calendar.timegm():

>>> import calendar
>>> import time
>>> calendar.timegm(time.strptime('Jul 9, 2009 @ 20:02:58 UTC', '%b %d, %Y @ %H:%M:%S UTC'))
1247169778

Takvim modülü hakkında daha fazla bilgi burada


16
Mevcut unix dönemini arıyorsanız lütfen @ DanJ'nin yorumuna veya naren'in cevabına bakın, bu cevap yanlış!
kosii

641

Zaman modülünü kullanın :

epoch_time = int(time.time())

14
@DanJ: Epoch'tan bu yana geçen saniye sayısıdır (belirli bir zamanda) ve herhangi bir saat diliminde aynıdır. Gerçi artık saniye cinsinden zaman örneklerini görmezden gelirsek; timeUnix epoch (1970) kullanıyorsa UTC'ye dönüştürmek kolaydır .
jfs

43
Bu OP soruyordu ne değildir Not ama ne ben istedim. Yani +1.
fearless_fool

6
başlığında sorulan sorunun cevabıdır: "çağdan beri geçen zamanı almak". +1
AlejandroVD

@JFSebastian Bu, saniyeye bir çığır açıyor. Yukarıdaki aynı cevabı kullanarak çözünürlüğü milisaniyeye kadar nasıl alabilirim?
Marlon Abeykoon

2
Yukarıdaki yorumumu genişletmek için : time.time()değer yerel saat dilimine bağlı DEĞİLDİR ("doğru" zaman dilimlerini ve benzerlerini hariç tutarsak), örneğin POSIX zamanını döndürürse (çoğu sistemde olduğu gibi), o zamandan beri SI saniye sayısıdır. Epoch (1970-01-01UTC) artık saniye saymıyor. Bu değer olabilir (artık saniye hariç) UTC dönüştürülebilir ancak o UTC değildir . @MarlonAbeykoon: Bu yanıtı
jfs

10

Not time.gmtimedamgası haritalar 0için 1970-1-1 00:00:00.

In [61]: import time       
In [63]: time.gmtime(0)
Out[63]: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

time.mktime(time.gmtime(0)) size yerel ayarınıza bağlı olan ve genel olarak 0 olmayabilecek bir miktarda kaydırılan bir zaman damgası verir.

In [64]: time.mktime(time.gmtime(0))
Out[64]: 18000.0

Ters time.gmtimeDİR calendar.timegm:

In [62]: import calendar    
In [65]: calendar.timegm(time.gmtime(0))
Out[65]: 0

Bu, time.mktime (geçerli saat dilimini dikkate alan) için daha iyi bir açıklama ve örnek verir, teşekkürler
Jkm

@Jkm: mktime()ile KULLANMAYIN gmtime(). yerel saatinizimktime() kabul eder, ancak UTC saatini döndürür - yerel saat diliminiz farklı olabilir ve büyük olasılıkla farklı olabilir. "yerel ayarınıza göre zaman damgası" anlamsızdır: POSIX zaman damgası yerel ayarınıza bağlı değildir (yerel saat dilimi) - tüm dünyada aynı değerdir. "epoch'dan bu yana saniye" çoğu durumda (Windows'ta bile) POSIX zaman damgasıdır - TAI zaman ölçeğini kullanan "doğru" zaman dilimleri gibi şeyler yaygın değildir. Bkz. Python'un time.time () yöntemi yerel veya UTC zaman damgasını döndürüyor mu? gmtime()
jfs

@JF Sebastian Haklısın. Aslında mktime()son zamanlarda birkaç sorunum var . Bazı python web sunucusu için (örneğin Tornado), sistem yerel ayarını değiştirsem bile, işlem çalışmaya devam ettiğinden, mktime()web sunucusu API'sı tarafından çağrılan zaman nesnesini oluşturmak için hala eski saat dilimini kullanır. Ben gmtime()gmt ofset geçmek ve elle uygulamak zorunda.
Jkm

5
ep = datetime.datetime(1970,1,1,0,0,0)
x = (datetime.datetime.utcnow()- ep).total_seconds()

Bu farklı olmalı int(time.time()), ancak böyle bir şey kullanmak güvenlidirx % (60*60*24)

datetime - Temel tarih ve saat türleri:

Zaman modülünden farklı olarak, tarih / saat modülü artık saniyeleri desteklemez.


3
t = datetime.strptime('Jul 9, 2009 @ 20:02:58 UTC',"%b %d, %Y @ %H:%M:%S %Z")

Bir nedenden dolayı strptime'a erişemiyorum. Ben tarih saat aktardıktan
calccrypto

1
@calccrypto from datetime import datetimeya yapmak ya da yapmakdatetime.datetime.strptime
pathikrit

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.