2012-01-10 18 views
14

Gelecek Cuma gününü nasıl hesaplayabileceğimi bilmem gerekiyor mu? Python'a yeni geliyorum :)Python'da gelecek Cuma nasıl hesaplanır?

Teşekkürler!

+1

Bu ev ödevi mi? –

+0

Hayır :) sadece nasıl yapılacağını en iyi şekilde bilmek istiyorum. Biliyorum, dateutil'in bunu yapmasına yardımcı olabileceği gibi bir şey var, ama bunu kullanmaya değmeyecek ya da değil – KennyPowers

+8

Neden insanlar her zaman ödev olup olmadığını soruyorlar? Tekrarlanır; Ne fark eder ki? – HexTree

cevap

19

Eğer datetime kütüphane gerekir, Başlamak için: Sonra

import datetime 

bir başlangıç ​​tarihine gerek; bu, bugün.

d = datetime.date.today() 

Oradan başlayarak, Cuma'ya ulaşıncaya kadar devam etmek isteyeceksiniz. date.weekday yöntem böylece, ile 6 0 olarak Pazar'a Pazartesi temsil eder: gunlerden cuma değilse

while d.weekday() != 4: 

, bir seferde bir gün, bir tane eklemek gerekecek. date nesnesine bir zaman aralığı eklemek için timedelta nesnesini kullanın.

d += datetime.timedelta(1) 

Hepsini bir araya getirin ve d sonuçta önümüzdeki Cuma temsil eden bir date nesneyi içerecektir. Bugün Cuma ise, bu kodun bugün üreteceğini unutmayın; Bunun yerine eğer yerine gelecek Cuma üretmek için tweak yapabilirsiniz. cevap taymon`s @ üzerinde

+0

Teşekkür ederiz! Çok yardımcı olan – KennyPowers

+0

@rolikoff FYI, size yardımcı olacak bir yanıt aldığınızda, onay işaretini tıklatarak kabul edebilirsiniz ([faq # howtoask] 'a bakın). – Taymon

+0

@ ugoren'ın yanıtı (yorumlarda önerilen değişiklikle birlikte) kesinlikle daha iyi –

41

belli bir gelişme:

today = datetime.date.today() 
friday = today + datetime.timedelta((4-today.weekday()) % 7) 

4 (esaslı 0, Pazartesi sayma) Cuma günü hafta içi olduğunu.
((4-today.weekday()) % 7), bir sonraki Cuma gününe kadar geçen gün sayısıdır (% her zaman negatif değildir).

@ ubuntu'nun cevabını gördükten sonra, iki şey eklemeliyiz:
1. Cuma = 4 evrensel olarak doğru olup olmadığından emin değilim. Bazı insanlar haftalarını Pazar günü başlatır.
2. Cuma günü, bu kod aynı gün geri döner. Sonrakini almak için (3-today.weekday())%7+1'u kullanın. Sadece eski x%n - ((x-1)%n)+1 dönüşümü. İşte

+3

['weekday()'] kullanıldığında Cuma her zaman 4'tür (http://docs.python.org/library/datetime.html#datetime .date.weekday) yöntemi. ['Isoweekday()'] (http://docs.python.org/library/datetime.html#datetime.date.isoweekday) yöntemi, Cuma gününe kadar 5 olarak Cuma gününü verir, çünkü pazartesiden Pazar gününe kadar 1 ile 7 arası işlem yapar. – Taymon

+5

'içe aktarma takvimi' eklemeyi düşünmüyorsanız '4' yerine 'calendar.FRIDAY' kullanabilirsiniz. – lumbric

15

sen dateutil kullanarak bunu nasıl bağlıdır: (. days = 1 argüman durumda today yılında "önümüzdeki Cuma" today aynı değildir olmasını sağlar Cuma olur)

import datetime as DT 
import dateutil.relativedelta as REL 
today = DT.date.today() 
print(today) 
# 2012-01-10 

rd = REL.relativedelta(days=1, weekday=REL.FR) 
next_friday = today + rd 
print(next_friday) 
# 2012-01-13