Does time.time()
Python zaman modülünde sistemin saati veya UTC kez iade?
Does time.time()
Python zaman modülünde sistemin saati veya UTC kez iade?
Yanıtlar:
time.time()
İşlev saniye, dönemin itibaren saniye sayısını verir. "Çağ" ın UTC'de 1 Ocak 1970 başlangıcı olarak tanımlandığını unutmayın. Böylece dönem UTC cinsinden tanımlanır ve zaman içinde küresel bir an oluşturur. Nerede olursanız olun, "saniye geçtiğinde" (time.time ()) aynı anda aynı değeri döndürür.
İşte bilgisayarımda koştum, bir dizeye de dönüştüren bazı örnek çıktı.
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>
ts
Değişken saniyede döndürülen zamandır. Daha sonra datetime
kütüphaneyi kullanarak okunabilir bir dize haline getirerek bir dizeye dönüştürdüm .
import time
datetime size zaman damgası verdiğinde. Milisaniyeyi kaldırın -str(datetime.datetime.now()).split('.')[0]
time.time()
herhangi bir saat diliminde değil . "çağdan beri geçen saniye" bir terimdir; Bu değildir geçen süre (Epoch) bir noktada yana saniye. Sen edebilirsiniz dönüştürmek kolay ve / veya UTC saat dilimine (tz veritabanı ile) yerel saate onu. btw, düşürürseniz .strftime()
sonuç (neredeyse) aynıdır (+/- mikrosaniye).
Bu, metin dosyalarınızda kullanılabilecek bir zaman damgasının metin formu içindir . (Sorunun başlığı geçmişte farklıydı, bu nedenle bu cevaba giriş, zaman olarak nasıl yorumlanabileceğini açıklığa kavuşturmak için değiştirildi. [Updated 2016-01-14])
Sen kullanarak bir dize olarak damgası alabilirsiniz .now()
ya .utcnow()
ait datetime.datetime
:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
now
Dan farklıdır utcnow
: aksi halde aynı şekilde çalışır - beklendiği gibi
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
Dizeye zaman damgasını açıkça oluşturabilirsiniz:
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
Veya zaman damgasını istediğiniz gibi biçimlendirmek için daha açık olabilirsiniz:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
ISO biçimini istiyorsanız .isoformat()
, nesnenin yöntemini kullanın :
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
Bunları, hesaplamalar ve dönüşüm olmadan yazdırma için değişkenlerde kullanabilirsiniz.
>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
import datetime; print "%s: My timestamp message" % datetime.datetime.utcnow()
Python3:import datetime; print ("%s: My timestamp message" % datetime.datetime.utcnow())
datetime.datetime.utcnow()
şeytan. Yerel saat olmayan saf bir tarih oluşturur. Yerel saatiniz UTC değilse YANLIŞ olacaktır. datetime.datetime.now(datetime.timezone.utc)
Bunun yerine kullanın . Bu, geçerli saati temsil eden saat dilimi farkında bir tarih oluşturur.
#Squiguy'un cevabına dayanarak, gerçek bir zaman damgası almak için onu şamandıradan yazarım.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
En azından bu kavram.
type(time.time())
gives<type 'float'>
int()
polimorfiktir. long
Gerekirse eski Python sürümlerinde dönecektir - tüm tamsayılar yeni Python sürümlerinde uzundur.
Cevap, ne ikisi de ne de olabilir.
ikisi de: time.time()
Dönemden bu yana geçen saniye sayısını döndürür. Sonuç saat dilimine bağlı değildir, dolayısıyla ne UTC ne de yerel saattir. İşte "Çağdan Beri Saniye" için POSIX tanımı .
her ikisi: time.time()
sistem saatinizin senkronize olmasını gerektirmez, bu nedenle değerini yansıtır (yerel saat dilimi ile ilgisi yoktur). Farklı bilgisayarlar aynı anda farklı sonuçlar alabilir. Bilgisayarınız zaman Öte yandan edilir daha sonra senkronize o (biz artık saniye göz ardı edersek) damgası UTC saati almak kolaydır:
from datetime import datetime
utc_dt = datetime.utcfromtimestamp(timestamp)
Çeşitli Python sürümlerinde UTC saatinden zaman damgalarını nasıl alacağınız hakkında bilgi için UTC'ye göre çağdan bu yana nasıl bir tarihe dönüştürülür?
datetime.utcfromtimestamp
bir cevapta 308 upvotes varken doğru bir şekilde bahseten tek cevaptır datetime.fromtimestamp
:-(
time.time()
işlevin ne döndürdüğü ile ilgilidir (çok kısa). Yorumunuz başka bir soruya değiniyor (yorumunuzu cevaplamaya başladığımdan beri değiştirdiniz. Daha da kötüsü). Bir kenara not; "doğru" kelimesi idareli kullanılmalıdır (zaman dilimleri karmaşıktır - gümüş mermi yoktur - sadece belirli bir kullanım durumu için değiş tokuş yapar).
datetime.datetime.utcfromtimestamp(ts)
. Yerel saatiniz UTC değilse, YANLIŞ olacaktır, çünkü yerel saat olmayan saf bir tarih oluşturur. datetime.datetime.fromtimestamp(ts,datetime.timezone.utc)
Bunun yerine kullanın . Bu, zaman damgasıyla aynı anı temsil eden saat dilimi farkında bir tarih oluşturur.
naive_dt.astimezone()
örtük gibi var olmamayı tercih ederim bytes.encode()
. Birçok durumda dahili olarak UTC saatiyle çalışmanın faydalı olduğu doğrudur. Datetime modülü hakkında söylenebilecek çok şey var (altın bir rozet almak için yeterli soruya cevap verdim) çoğu soru için kapsam dışı: ne time.time()
döner.
Sonunda yerleştim:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
time.time()
ondalık / şamandıra gibi döndürür 1574115250.818733
ve milisaniye-beri-dönem kolayca int(time.time() * 1000)
örn.1574115254915
Belirli bir zaman diliminde "dönem" diye bir şey yoktur. Dönem, zaman içinde belirli bir an olarak iyi tanımlanmıştır, bu nedenle saat dilimini değiştirirseniz, zamanın kendisi de değişir. Özellikle, bu sefer Jan 1 1970 00:00:00 UTC
. Böylece time.time()
dönemden bu yana geçen saniye sayısını döndürür.
zaman damgası her zaman utc cinsinden zamandır, ancak aradığınızda datetime.datetime.fromtimestamp
yerel zaman diliminizde bu zaman damgasına karşılık gelen zamanı döndürür, bu nedenle sonuç yerel ayarınıza bağlıdır.
>>> import time, datetime
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
arrow
Farklı davranışları olan güzel bir kütüphane var . Aynı durumda UTC saat dilimi ile size zaman nesnesi döndürür.
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>