2011-09-26 15 views
18

Python'da, haftanın gününü datetime.strftime() kullanarak bir tamsayı olarak göstermek, datetime.weekday()'u kullanmanın farklı bir sonucunu gösterir. strftime() ilePython'un datetime.strftime ('% w') ve datetime.weekday() neden haftanın günleri için farklı dizinler kullanıyor?

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> now.strftime('%A') 
'Sunday' 
>>> now.strftime('%w') # Day of the week as an integer. 
'0' 
>>> now.weekday() # Day of the week as an integer, a different way. 
6 

, dize biçimi %w haftanın ilk günü olarak Pazar sahiptir. weekday() ile, bunun yerine pazartesi.

bu iki farklı neden tarihçesi nedir?

cevap

13

Python'un strftime fonksiyon c kütüphanede o öykünür: Ben hiç de sürpriz değil sanırım. Böylece, %w'un Pazar için 0 döndürdüğü motivasyonu tamamen bundan geliyor. Buna karşılık, daha eski time modülünün davranışını eşleştirmeyi amaçladığı için, date.weekday() yöntemi, Pazar için 6 yöntemini döndürür. Bu modül süreleri içinde genellikle bir struct_time tarafından temsil edilir ve bunun içinde, struct_time.tm_day bir Pazar temsil etmek için bir 6 kullanır.

doğru soru o zaman neden time.struct_time C kütüphanesinin tm yapı bir 0 kullandığında, bir 6 gibi bir Pazar temsil ediyor ... olur ??

Ve cevap ... çünkü sadece öyle. Bu davranış, Guido'nun ilk kez gmtime ve localtime işlevlerinde ilk kez kontrol edildiğinden beri var olmuştur.

Ve Guido yanlış olamaz ... bu yüzden ona sormalısınız. strftime değilken

+0

İtalyanca Guetro, ve Foo Bah’ın ima ettiği gibi, Pazartesi ilk İtalya'da haftanın günü –

+2

@ MikeM.Lin Guido Hollandalıdır. Bu nedenle "Hollandalı olmadıkça ilk başta bu şekilde belirgin olmayabilir". –

+2

"İtalyan" ile "Guido" eşitledim. Ben: -P New York'luyum, eğer bu daha fazla mümkünse –

5

Başlangıçta, ISO 8601 standardı Pazar'a Pazartesi temsil etmek 1 .. 7 kullandı. Kolaylık için, daha sonra yorumlamaya 0=Sunday izin verildi.

daha tutarlı bir şey kullanmak istiyorsanız, isoweekday

0=Monday standart Avrupa kongre olduğunu kullanmayı deneyin. P

+1

Bu hiçbir fazla tutarlılık sağlar. O zaman soru, '% w', '0 'iken,' isoweekday() ',' 7'yi döndürür. – donkopotamus

+0

@Donkopotamus meselesi, birden fazla standart ve konvansiyonun (ISO standardı ve ABD sözleşmesi ve Avrupa sözleşmesi gibi) bulunmasıdır. Strftime'ın bazı sürümlerinde (php gibi) ABD modunu kullanmak için açık bir seçenek vardır (iirc,% u' veya '% U'ydu. –

2

Belki weekday yerel ayarını temel alan? Farklı çıkış Çünkü:

In [14]: d.strftime("%A") 
Out[14]: 'Sunday' 

In [15]: d.strftime("%w") 
Out[15]: '0' 

In [16]: now.weekday() 
Out[16]: 0 
İlgili konular