2012-01-10 7 views
14

Tôi cần biết làm cách nào để tính ngày của ngày thứ Sáu tới? Tôi mới sử dụng Python :)Làm thế nào để tính toán thứ sáu tới trong Python?

Cảm ơn!

+1

Đây có phải là bài tập về nhà không? –

+0

Không :) chỉ muốn biết cách tốt nhất để làm điều đó. Tôi biết có điều gì đó giống như dateutil có thể giúp làm điều đó, nhưng không chắc nó có đáng để sử dụng nó hay không – KennyPowers

+8

Tại sao mọi người luôn hỏi liệu đó có phải là bài tập ở nhà không? Nó lặp đi lặp lại; nó đã tạo ra sự khác biệt gì? – HexTree

Trả lời

19

Để bắt đầu, bạn sẽ cần datetime thư viện:

import datetime 

Sau đó, bạn cần một ngày bắt đầu; đó là, hôm nay.

d = datetime.date.today() 

Bắt đầu từ đó, bạn sẽ muốn tiếp tục cho đến khi bạn đạt đến thứ Sáu. Phương pháp date.weekday đại diện từ Thứ Hai đến Chủ Nhật là 0 đến 6, vì vậy:

while d.weekday() != 4: 

Nếu ngày hiện tại không phải là thứ Sáu, bạn sẽ có thêm một ngày, cùng một lúc. Để thêm khoảng thời gian vào đối tượng date, bạn sử dụng đối tượng timedelta.

d += datetime.timedelta(1) 

Đặt nó tất cả cùng nhau, và d cuối cùng sẽ chứa một đối tượng date đại diện cho thứ sáu tới. Lưu ý rằng nếu hôm nay là thứ Sáu, mã này sẽ sản xuất hôm nay; bạn có thể tinh chỉnh nó nếu bạn cần nó để sản xuất vào thứ sáu tới.

+0

Cảm ơn bạn! Rất hữu ích – KennyPowers

+0

@rolikoff FYI, khi bạn nhận được câu trả lời giúp bạn, bạn có thể chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm (xem [faq # howtoask]). – Taymon

+0

Bình chọn xuống vì câu trả lời của @ ugoren (với thay đổi được đề xuất trong nhận xét) hoàn toàn tốt hơn –

41

Một cải tiến nhất định trên @ taymon`s câu trả lời:

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

4 là ngày trong tuần hôm thứ Sáu (0 dựa, kể từ Thứ Hai).
((4-today.weekday()) % 7) là số ngày cho đến thứ sáu tới (% luôn không âm).

Sau khi xem câu trả lời của @ ubuntu, tôi nên thêm hai điều:
1. Tôi không chắc liệu Friday = 4 có đúng không. Một số người bắt đầu tuần của họ vào chủ nhật.
2. Vào thứ Sáu, mã này trả về cùng ngày. Để tiếp theo, hãy sử dụng (3-today.weekday())%7+1. Chỉ cần chuyển đổi x%n cũ sang ((x-1)%n)+1.

+3

Thứ sáu luôn là 4 khi sử dụng ['weekday()'] (http://docs.python.org/library/datetime.html#datetime .date.weekday). Phương thức ['isoweekday()'] (http://docs.python.org/library/datetime.html#datetime.date.isoweekday) cho thứ Sáu là 5, vì nó xử lý từ thứ Hai đến Chủ Nhật từ 1 đến 7. – Taymon

+5

Bạn có thể sử dụng 'calendar.FRIDAY' thay vì' 4' nếu bạn không nhớ thêm 'calendar calendar'. – lumbric

15

Đây là cách bạn có thể làm điều đó bằng dateutil: (. Đối số days = 1 đảm bảo rằng "thứ sáu tới" là không giống như today trong trường hợp today sẽ xảy ra là thứ sáu)

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