2015-09-01 17 views
5

Unixtimestamp formatında datetime ile milisaniyede milisaniyede ve saat dilimi bilgisiyle birlikte bir csv dosyası var. Bunu daha fazla işlem için daha kullanışlı bir datetime formatına dönüştürmek istiyorum. Örneğin, saat 1437323953822 ve saat dilimi -14400000 şeklindedir.Python: unixtimestamp ve timezone, datetime nesnesine nasıl dönüştürülür?

Ben

datetime.datetime.fromtimestamp(1437323953822/1000) 

kullanarak bir datetime içine damgası dönüştürebilirsiniz Ama nasıl şimdi biliyorum ne olduğunu dilimini -4 UTC zamanı dahil ederim.

(-14400000/1000/60/60) = -4 

Gerçek saati öğrenmek için bu saati nasıl kullanırım?

+0

Gerçek zaman dediğinizde ne demek istiyorsunuz? UTC saatini mi arıyorsunuz? –

+0

Gerçek yerel saati istiyorum. – sfactor

+0

Doğru gerçek saati doğru zamanda almalısınız? Bunun yerine UTC alıyor musunuz? –

cevap

1

fromtimestamp ayrıca diliminin için tzinfo bir alt sınıfını başka bir parametre alabilir:

classmethod datetime.fromtimestamp(timestamp[, tz])

Return time.time() tarafından döndürülen gibi POSIX zaman damgasına gelen yerel tarih ve saat. İsteğe bağlı argüman tz ise veya belirtilmemişse, zaman damgası platformun yerel tarih ve saatine dönüştürülür ve döndürülen datetime nesnesi naiftir.

Başka tz sınıf tzinfo alt sınıfının bir örneğini olmalıdır ve zaman damgası tz zamanı bölgesine dönüştürülür. Bu durumda sonuç eşdeğer tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)).

0

fromtimestamp() zaten yerel saat yani döndürür için, sen fromtimestamp() doğru otomatik olarak belirlerse utc ofset takmak gerekmez geçerli:

#!/usr/bin/env python 
from datetime import datetime 

local_time = datetime.fromtimestamp(1437323953822 * 1e-3) 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

fromtimestamp() bazı durumlarda başarısız olabilir, örneğin, yerel saat dilimi geçmişte farklı bir utc ofsetine sahipse ve fromtimestamp(), belirli bir platformda (özellikle Windows) geçmiş zaman dilimi veritabanı kullanmazsa. Bu durumda, utc zaman açıkça yerel saati inşa etmek ve verilen utc offset:

#!/usr/bin/env python 
from datetime import datetime, timedelta 

utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=1437323953822) 
utc_offset = timedelta(milliseconds=-14400000) 
local_time = utc_time + utc_offset 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

Python always expects POSIX Epoch ve nedenle hardcode için ok. Açık formül daha hassas olabilir (yuvarlama hatası yoktur) ve daha geniş bir girdi zaman damgası aralığı kabul edebilir (fromtimestamp() aralığı platforma bağlıdır ve ilgili datetime aralığından daha dar olabilir).