2010-03-25 19 views
15

Ben net her yerinde arama olmuştur ve bu konudaPython | mktime taşma hatası

OverflowError: mktime argument out of range 

ben bilmek istiyorum

t = (1956, 3, 2, 0, 0, 0, 0, 0, 0) 
ser = time.mktime(t) 

bu istisna neden kod için uygun bir çözüm bulamadık Bu istisnanın gerçek nedeni, bazı tarih geçerli bir aralıkta değil ama bana hiç mantıklı değil, ve ne olabilir bir dizi varsa söylüyorlar. Kullandığımız sisteme bağlı. Ayrıca bu konu için iyi bir çözüm bulmak ister.

Teşekkürler.

cevap

19

time.mktime platform Cı kütüphanesinden yatan mktime işlevini çağırır. Örneğin, tarih Unix çağın önce olduğu gibi negatif bir sayı döndürür olsa da, Mac OS X için beni gayet iyi eserler yayınlanmıştır yukarıdaki kodu. Yani nedeni, platformun mktime uygulanması muhtemelen Unix çağın önce tarihleri ​​desteklemez olmasıdır. Sen, yukarıdaki tarihine karşılık gelen bir datetime nesneyi oluşturmak için Python'un datetime modülü kullanmak Unix dönemi kapsar başka datetime nesneden onu çıkarmak ve Dönemden beri saniye sayısını elde etmek için hesaplanan timedelta nesneyi kullanabilirsiniz:

from datetime import datetime 
epoch = datetime(1970, 1, 1) 
t = datetime(1956, 3, 2) 
diff = t-epoch 
print diff.days * 24 * 3600 + diff.seconds 

Güncelleştirme: Python 2.7 veya üzerini kullanıyorsanız, Chad Miller'ın yorumunda aşağıda belirtildiği gibi print diff.total_seconds()'u kullanabilirsiniz.

+1

print diff.total_seconds() –

+0

Teşekkürler, Cevabımı güncelledim. Python 2.5 ve 2.6 bu cevabı eklediğimde 2010'da çok daha yaygındı ve “total_seconds()” 2,7'den itibaren mevcut. –