2009-12-31 31 views
9

Tôi đang tìm cách tìm hiểu xem một ngày cụ thể có phải là "ngày lễ" hay không.Lịch ngày lễ, Định dạng tệp, et al

Cụ thể, bạn có thể nói is_holiday (datetime.date, "USA") sẽ trả lời xem ngày cụ thể có phải là ngày nghỉ cho lịch có tên "Hoa Kỳ" hay không.

Tôi nhận thấy rằng không có tầm thường cách thực hiện việc này cho tất cả các ngày lễ trong tất cả các năm. Ví dụ: trong khi Giáng sinh luôn là ngày 25 tháng 12, cho mục đích chính phủ liên bang, đôi khi chúng tôi kỷ niệm (tức là, không phải là ngày làm việc) vào ngày 24 tháng 12 và đôi khi vào ngày 26. Ví dụ, ngày lễ của người Do thái (ví dụ) di cư hàng năm (tương đối so với Lịch Gregory).

Tôi không tìm kiếm tính toán cho mỗi kỳ nghỉ. Tôi tự hỏi nhiều hơn nếu có một số định dạng tệp tiêu chuẩn được chấp nhận liệt kê ngày lễ theo năm và nếu có, nếu có bất kỳ mô-đun nào - bằng Python, cụ thể, nhưng tôi linh hoạt - hiểu cách đọc định dạng đã nói. Tương tự, định dạng tệp sẽ xác định ngày cuối tuần - thường là Thứ Bảy và Chủ Nhật, nhưng ở một số vùng nhất định, có thể là Thứ Sáu và Thứ Bảy, v.v.

Trả lời

6

Mozilla có một bộ định dạng user-contributed holiday files ở định dạng .ics. Điều đó có thể giúp bạn bắt đầu. Thật không may họ đi ra đến phạm vi ngày khác nhau. iCalShare cũng có lịch nghỉ ở định dạng .ics.

Lưu ý:

Một số ngày lễ là state hoặc region-related, chứ không phải là country-related.

Tôi đã tìm thấy trước đây cách tiếp cận phân cấp hoạt động. ví dụ. kiểm tra lịch nghỉ lễ thành phố, rồi lịch của tiểu bang, rồi lịch biểu quốc gia.

Có mô-đun Python để đọc các tệp .ics được gọi là icalendar (cũng trên pypi). Tôi không thể xác minh cho chất lượng của nó, thật không may.

+0

Đồng ý về tình trạng/khu vực liên quan đến ... "USA" trong ví dụ tầm thường của tôi không phải là đất nước -name, nó chỉ là tên của "lịch". Có thể dễ dàng như vậy là 'is_holiday (datetime.date," Hello World ")' – FreeMemory

+0

Tôi đã đoán được nhiều. Những gì tôi đã phải làm trong quá khứ là thực hiện một chiến lược 'mùa thu', và do đó lịch của tôi có một khái niệm về một hệ thống phân cấp được xây dựng trong chúng. ví dụ. NYC lịch của tôi biết rằng 'cha mẹ' của nó là lịch Hoa Kỳ vv. –

2

cổ điển holiday.py mô-đun (một phần của một dateutil gói cũ - đủ tuổi phải dựa vào mô-đun time chứ không phải là tương đối gần đây datetime) làm một công việc tốt của tính toán calendric (bao gồm < Do Thái - dịch> Gregorian lịch) nhưng không đối phó với sự kiên trì (đọc hoặc viết).

Khi phản hồi của @ Brian gợi ý, ics là định dạng thống trị cho "lịch" trong tệp (và có các tệp ngày lễ, trong số các tệp khác, ở định dạng như vậy). Để đọc và ghi tệp ics bằng Python, bạn có thể sử dụng gói iCalendar, thực hiện nhiệm vụ đó một cách chính xác hoặc vobject, một gói rộng hơn hỗ trợ nhiều định dạng vCard và vCalendar (bao gồm iCalendar).

0

đọc Calendrical tính toán: http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml

Các quy tắc khác nhau cho ngày lễ của Mỹ được cung cấp trong chi tiết, với các thuật toán.

Doanh nghiệp "Mừng" (di chuyển ngày lễ Giáng sinh đến ngày 24 vì ngày 25 rơi vào thứ Bảy) là một vấn đề đơn giản khi kiểm tra danh sách Ngày lễ của Liên bang Hoa Kỳ.

http://www.opm.gov/Operating_Status_Schedules/fedhol/2009.asp

Các trạng thái riêng lẻ khác nhau, cũng như các doanh nghiệp. Nhưng đó là một sự khởi đầu.

+0

Tôi __not__ quan tâm đến việc tính toán các ngày lễ, tuy nhiên. Các vùng khác nhau, các tôn giáo khác nhau và các quy tắc khác nhau làm cho một nhiệm vụ rất khó khăn. Tôi rất vui khi lưu trữ nhiều tệp khác nhau, mỗi tệp đại diện cho một "lịch" khác nhau. Tôi đã tìm kiếm thêm một số đặc tả tệp có thể hoạt động mà không cần phát minh ra của riêng tôi. .ics là một sự khởi đầu, nhưng có vẻ là __too much__, vì nó cũng được sử dụng cho "sự kiện", v.v. – FreeMemory

+1

@FreeMemory: "Tôi đang tìm kiếm thêm một số đặc tả tệp". Tốt. Cập nhật câu hỏi của bạn để thực sự nói rằng rất, rất rõ ràng. –

+1

@S. Lott: Có lẽ đọc đoạn cuối? "Tôi không tìm kiếm tính toán cho mỗi kỳ nghỉ. Tôi tự hỏi nhiều hơn nếu có một số định dạng tệp __standard chuẩn được liệt kê ngày lễ theo năm" (nhấn mạnh thêm). – FreeMemory

Các vấn đề liên quan