2009-12-31 23 views
9

Estoy buscando una manera de averiguar si una fecha determinada es una "fiesta", dado algún calendario de vacaciones.calendarios de vacaciones, formatos de archivo, et al

En concreto, podría decir is_holiday (datetime.date, "USA") que respondería si la fecha dada es feriado para el calendario llamado "EE. UU.".

Reconozco que no hay trivial forma de hacer esto para todas las vacaciones de todos los años. Por ejemplo, mientras que la Navidad siempre es el 25 de diciembre, para fines del gobierno federal, a veces celebramos el (es decir, no es un día hábil) el 24 de diciembre y, a veces, el día 26. De forma similar, las festividades judías (por ejemplo) migran anualmente (en relación con el calendario gregoriano).

No estoy buscando cálculos para cada vacación. Me pregunto más si hay algún formato de archivo estándar aceptado que enumere las vacaciones por año, y si es así, si hay algún módulo (en Python, específicamente, pero soy flexible) que entienda cómo leer dicho formato. Del mismo modo, el formato de archivo definiría fines de semana, que normalmente son sábado y domingo, pero en ciertas regiones puede ser viernes y sábado, etc.

Respuesta

6

Mozilla tiene un conjunto de user-contributed holiday files en formato .ics. Eso puede ayudarte a comenzar. Lamentablemente salen a diferentes rangos de fechas. iCalShare también tiene calendarios de vacaciones en el formato .ics.

Nota:

Algunas fiestas son state o region-related, en lugar de country-related.

He encontrado en el pasado que un enfoque jerárquico funciona. p.ej. verifique el calendario de vacaciones de la ciudad, , luego un calendario estatal, y luego un calendario nacional.

Hay un módulo de Python para leer archivos .ics llamado icalendar (también en pypi). No puedo responder por su calidad, desafortunadamente.

+0

acordada por el estado/relacionados con la región ... "EE.UU." en mi ejemplo trivial no era el país -name, era solo el nombre del "calendario". Podría haber sido tan fácil como 'is_holiday (datetime.date," Hello World ")' – FreeMemory

+0

Me imaginé tanto. Lo que he tenido que hacer en el pasado es implementar una estrategia de 'repliegue', y en consecuencia mis calendarios tienen un concepto de una jerarquía incorporada en ellos. p.ej. mi calendario de NYC sabe que su 'padre' es el calendario de EE. UU., etc. –

2

El módulo de holiday.py clásica (parte de una antigua dateutil paquete - la edad suficiente para confiar en el módulo time en lugar de la relativamente reciente datetime) hace un buen trabajo de los cálculos calendáricos (incluyendo judías < - traducciones> gregoriana del calendario), pero no trata con la persistencia (leer o escribir).

Como la respuesta de @ Brian sugiere, ics es el formato dominante para "calendarios" en un archivo (y hay archivos de vacaciones, entre otros, en dicho formato). Para leer y escribir archivos ics en Python puede, por ejemplo, usar el paquete iCalendar, que hace precisamente esa tarea, o vobject, que es un paquete mucho más amplio que admite el rango de formatos vCard y vCalendar (incluido iCalendar).

0

cálculos calendáricos: Leer http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml

Las diversas reglas para días festivos de EE.UU. se proporcionan en los detalles, con algoritmos.

El negocio de "Celebrar" (mover las vacaciones de Navidad al día 24 porque el día 25 es sábado) es una simple cuestión de consultar la lista de fiestas federales de los EE. UU.

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

estados individuales varían, por supuesto, al igual que las empresas. Pero eso es un comienzo.

+0

No estoy interesado en calcular las vacaciones, sin embargo. Diferentes regiones, diferentes religiones y diferentes reglas hacen que sea una tarea muy difícil. Me encantaría almacenar múltiples archivos diferentes, cada uno para representar un "calendario" diferente. Estaba buscando más especificaciones de archivos que funcionaran sin inventar el mío. .ics es un comienzo, pero parece ser "demasiado", ya que también se usa para "eventos", etc. – FreeMemory

+1

@FreeMemory: "Estaba buscando más especificaciones de archivos". Bueno. Actualiza tu pregunta para decir eso de manera muy, muy clara. –

+1

@S. Lott: ¿Quizás leas el último párrafo? "No estoy buscando cálculos para cada día festivo. Me pregunto más si hay algún formato de archivo aceptado __ estándar que enumere las vacaciones por año" (énfasis añadido). – FreeMemory

Cuestiones relacionadas