Tarih / saat dönüşümü time.mktime yanlış görünüyor kullanarak

oy
3
>>> import time
>>> time.strptime(01-31-2009, %m-%d-%Y)
(2009, 1, 31, 0, 0, 0, 5, 31, -1)
>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233378000.0
>>> 60*60*24 # seconds in a day
86400
>>> 1233378000.0 / 86400
14275.208333333334

time.mktimeDönemden beri saniye sayısını dönmelidir. Gece yarısı bunu bir süre veriyorum ve dönem gece yarısı olduğu için, sonuç bir günde saniye sayısı ile bölünebilen eşit olması gerekmez mi?

Oluştur 22/08/2008 saat 10:06
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
3
mktime(...)
    mktime(tuple) -> floating point number

    Convert a time tuple in local time to seconds since the Epoch.

yerel saat ... o süslü.

Zaman tuple:

The other representation is a tuple of 9 integers giving local time.
The tuple items are:
  year (four digits, e.g. 1998)
  month (1-12)
  day (1-31)
  hours (0-23)
  minutes (0-59)
  seconds (0-59)
  weekday (0-6, Monday is 0)
  Julian day (day in the year, 1-366)
  DST (Daylight Savings Time) flag (-1, 0 or 1)
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is -1, mktime() should guess based on the date and time.

Bu arada, biz ayrı 6 saat gibi görünüyor:

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233356400.0
>>> (1233378000.0 - 1233356400)/(60*60)
6.0
Cevap 22/08/2008 saat 10:21
kaynak kullanıcı

oy
0

İlginç. Bilmiyorum, ama bu çalıştım:

>>> now = time.mktime((2008, 8, 22, 11 ,17, -1, -1, -1, -1))
>>> tomorrow = time.mktime((2008, 8, 23, 11 ,17, -1, -1, -1, -1))
>>> tomorrow - now
86400.0

hangi beklenen budur. Tahminim? Belki zaman düzeltme Dönemden beri yapıldı. Bu sadece birkaç saniye, bir sıçrama yıl gibi bir şey olabilir. Ben daha önce böyle birşey duydum ama tam olarak nasıl ve ne zaman yapılır hatırlayamıyorum ...

Cevap 22/08/2008 saat 10:22
kaynak kullanıcı

oy
7

Kısa cevap: Çünkü saat dilimi.

Epoch UTC içindedir.

Örneğin, ben IST (İrlanda Standart Saati) veya UTC + 1'de değilim. time.mktime()Bu ifade eder sistemimde yüzden, benim zaman dilimine göre görecelidir

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000.0

Eğer sonuç 1233378000 var o olduğu için 5 saat arkamdasın öneririm

>>> (1233378000 - 1233360000) / (60*60)    
5

Göz at time.gmtime()UTC kulanan fonksiyonu.

Cevap 22/08/2008 saat 10:24
kaynak kullanıcı

oy
2

Phil cevabı gerçekten çözüldü, ama biraz daha ayrıntılı olacak. çağı UTC olduğundan ben çağın diğer kez karşılaştırmak istiyorsanız, ben de UTC olarak yorumlamak gerekir.

>>> calendar.timegm((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000
>>> 1233360000 / (60*60*24)
14275

Tedavisi için olan bir zaman damgası zaman tuple dönüştürerek UTC zamanı olarak, bir dizi elde edilmesi olan bir günde saniye sayısına göre bölünebilir.

Ben sonuçta peşinde olduğumu ne bir gün-den çağın temsil tarih dönüştürmek için kullanabilir.

Cevap 22/08/2008 saat 11:12
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more