2010-03-06 9 views
13

¿Cuál es la forma más sencilla de determinar si una fecha es un feriado bancario de los EE. UU. En Python? Parece que hay varios calendarios y servicios web el listado de fiesta para varios países, pero no he encontrado nada específico a los bancos en los EE.UU.Detectando un Holiday en los Estados Unidos

+0

@krosenvold: Ese es el punto, estos días festivos se extienden normalmente el fin de semana y la gente llaman a estos días festivos. Las vacaciones de más de una semana entran en la categoría de sabático. – mjv

+1

¿Con cuánta anticipación necesita saberlos? –

+0

@krosenvold: Es una pena, pero no puedo negarlo. –

Respuesta

5

Algunos comentarios generales:

No creo que @ AST4 realmente significa "día n de semana enésima algoritmo de mes n ". La noción de "enésima semana en el mes n" es alucinante (como el "calendario ISO"). Nunca he visto unas vacaciones definidas en términos de "enésima semana". Día de Martin Luther King es un ejemplo del tipo "día de la semana enésima en el mes" de vacaciones:

MONDAY, ...., SATURDAY = range(7) 
JAN, ....., DEC = range(1, 12) 

Holiday("Martin L King's Birthday", type='floating', 
    ordinal=3, weekday=MON, month=JAN) 
Holiday("Memorial Day", type='floating', 
    ordinal=-1, weekday=MON, month=MAY) 

El EE.UU. no tiene fiestas relacionadas con la Pascua. Definición no es difícil:

Holiday("Good Friday", type='moveable', 
    base='gregorian_easter', delta_days=-2) 
Holiday("Easter Monday", etc, delta_days=1) 
# Some states in Australia used to have Easter Tuesday (no kidding) 
Holiday("Easter Tuesday", etc, delta_days=2) 

La idea 'base' se puede utilizar para atender para el año nuevo lunar, de hecho, cualquier día de fiesta que es un desplazamiento desde una fecha base que necesita un procedimiento especial para calcularlo.

Los llamados días de fiesta "estáticos" no son fijos cuando la fecha "fijo" es un sábado o el domingo e incluso pueden desaparecer (sin días de baja laboral alternativa):

# Americans will get a day off on Friday 31 Dec 2010 
# because 1 Jan 2011 is a Saturday. 
Holiday("New Year's Day", type='fixed', 
    day=1, month=JAN, sat_adj=-1, sun_adj=????) 

# Australia observes ANZAC Day on the day, with no day off 
# if the fixed date falls on a weekend. 
Holiday("ANZAC Day", type='fixed', day=25, month=APR, sat_adj=0, sun_adj=0) 

# Two consecutive "fixed" holidays is OK; three would need re-thinking. 
# Australia again: 
Holiday("Christmas Day", type='fixed', day=25, month=DEC, sat_adj=2, sun_adj=1) 
Holiday("Boxing Day", type='fixed', day=26, month=DEC, sat_adj=2, sun_adj=2) 

Estoy seguro de que son formas de especificar vacaciones que no están cubiertas por las reglas anteriores ... cualquier noticia es bienvenida.

+1

Qué es esta clase de vacaciones que estás usando? –

+0

@Gringo Suave: es solo una notación por mostrar la mayoría de las formas extrañas en que se pueden definir las vacaciones. –

3

Asegúrese de que la fecha = uno de estos:!

http://www.buyusa.gov/uk/en/us_bank_holidays.html

+0

Se aplican a la Embajada de los EE. UU. Pero pueden variar para un banco dado: por ejemplo, mi banco está abierto en Columbus Day, que no es una fiesta muy popular en California. –

+0

@Alex Martelli: Su banco puede estar abierto, pero el alimentado está cerrado, por lo que la red ACH no itera en Columbus Day. Se trata como un sábado. –

2

I De hecho, he trabajado recientemente en un problema muy parecido a este. Las vacaciones estáticas son bastante triviales para generar (por ejemplo, Nochevieja: 31 de diciembre, ciclo por años). Existen algoritmos bien definidos para generar las vacaciones flotantes. Básicamente, tiene una fecha de inicio (por ejemplo, el 1 de enero de 1900) y trabaja desde allí. Lo que terminé implementando fue un enésimo día de la enésima semana del algoritmo de mes n. (Por ejemplo, día MLK = 3 ° lunes de enero). La Pascua es algo diferente de hacer, pero nuevamente hay algoritmos bien definidos para eso que ya está afuera (el Viernes Santo es trivial después de enero).

Hay un libro bastante decente en esta ahí fuera es posible que desee comprobar hacia fuera: Calendrical Calculations

+0

Creo que quieres decir "El Viernes Santo es trivial después de la Pascua", ¿verdad? Dicho esto, ni el Viernes Santo ni el Lunes de Pascua suelen ser festivos en los EE. UU., Y la Pascua siempre es un domingo y, por lo tanto, nunca es un día hábil. –

+0

Sí, lo siento, estaba escribiendo demasiado rápido. – ast4

+0

Algunas aclaraciones (gracias John Machin por señalarlo): Para el día n. ° quiero decir: lunes = 1, martes = 2, miércoles = 3, jueves = 4, viernes = 5, sábado = 6, domingo = 7 – ast4

11

Pandas El paquete proporciona una solución conveniente para esto:

from pandas.tseries.holiday import USFederalHolidayCalendar 
cal = USFederalHolidayCalendar() 
holidays = cal.holidays(start='2014-01-01', end='2014-12-31').to_pydatetime() 
if datetime.datetime(2014,01,01) in holidays: 
    print True 
Cuestiones relacionadas