Tamsayı zaman damgasını Python tarih saatine dönüştürme


189

"1331856000000" gibi zaman damgalarını içeren bir veri dosyam var. Ne yazık ki, biçim için çok fazla belge yok, bu yüzden zaman damgasının nasıl biçimlendirildiğinden emin değilim. Python'un standardını datetime.fromordinal()ve datetime.fromtimestamp()birkaçını denedim , ama hiçbir şey eşleşmiyor. Belirli bir sayının geçerli tarihe (ör. 2012-3-16) karşılık geldiğinden eminim, ancak çok daha fazlası değil.

Bu numarayı nasıl a dönüştürebilirim datetime?

Yanıtlar:


329

datetime.datetime.fromtimestamp()milisaniye cinsinden zaman damgasına sahip olmanız dışında (JavaScript'te olduğu gibi), ancak fromtimestamp()saniyeler içinde Unix zaman damgası beklediğiniz sürece doğrudur .

Şöyle yapın:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

ve sonuç:

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

Sorunuza cevap veriyor mu?

EDIT : JF Sebastian doğru (float ) tarafından gerçek bölümü kullanmanızı önerdi . Fark önemli, eğer kesin sonuçlar almak istiyorsanız, cevabımı değiştirdim. Her döner Python 2.x varsayılan davranışı, farkı sonuçları (kullanarak bölünmesi sırasında operatör) ile oluşur (buna taban bölümü ). Böleni (an ) bölenle ( kayan nokta olarak gösterme) veya (veya vb.) İle değiştirerek, bölme gerçek bölme haline gelir . Python 2.x döner bölünmesi yoluyla , tarafından ,1e31000int/intint1000int1e31000float(1000)1000.floatintfloatfloatintfloattarafından floatvs Ve geçirilen zaman damgası bazı fraksiyonel parçası olduğunda fromtimestamp()yöntemle, bu yöntemin sonuç da (mikrosaniye sayısı gibi) o fraksiyonel bölümü hakkında bilgi içerir.


13
gerçek bölümü kullan:/ 1e3
jfs

@JFSebastian: Tamamen haklısın, cevabımı düzenledim ve neden haklı olduğuna dair bir açıklama ekledim. Açıklamaya katılmıyorsanız, lütfen bana bildirin.
Tadeck

@ manu-fatto: Bu gerçekten önemli değil. x * 0.001ve x / 1e3ikisi de aynıdır, fark gösterim ve uzunluktadır (orijinal olan daha kısadır). Bazı insanlar için, önerdiğiniz çarpımsal ters sayıyla ( 1/x) çarpmak yerine sayıya bölünmek daha açık olabilir . Ancak alternatif yaklaşım önerdiğiniz için teşekkür ederiz.
Tadeck

58
Bu işlev tehlikelidir, çünkü saat dilimini dikkate alır. Utcfromtimestamp
Haim Bender

12
@HaimBender Teşekkürler! Yorumlarınızın daha fazla ilgiyi hak ettiğini hissediyorum. fromtimestampyerel utcfromtimestampsaatteki tarih ve saati size UTC olarak tarih ve saat verir.
yusong
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.