API de cálculo de calendario

Estoy buscando una biblioteca de calendario bien respaldada (es decir, en desarrollo activo o tan madura que pueda ser una elección natural y sin contradicciones). Principalmente necesito que me diga cuándo la próxima o más fechas son las que coinciden con los criterios que especifico. Los criterios representativos que necesito suministrar son:

Cada 1-12 mes(es) en el

  1. el sábado pasado
  2. último día
  3. primer sábado
  4. en el día

(Por supuesto, si la biblioteca puede manejar estos, es probable que pueda manejar muchos más que me puedan resultar útiles en una fecha posterior).

Usaré esta biblioteca en OS X, por lo que el idioma preferido de la biblioteca será (en orden de conveniencia) (a) Swift, (b) Objective-C, (c) C y (d) C++.

Las clases Cocoa de Apple ofrecen dos posibles soluciones:

  1. Las clases de EventKit. La API proporcionada puede manejar todo lo que mencioné anteriormente. El problema es que requiere que interactúe directamente con el calendario del usuario y esto es algo que quiero evitar.

  2. Las clases NSCalendar y NSDateComponents. Estos pueden manejar la mayor parte de lo que mencioné anteriormente, pero no veo una forma de especificar 'último', por ejemplo.

¿Alguien tiene alguna sugerencia?

Respuestas (1)

Una sugerencia para usted sería la clase wxDateTime de la biblioteca wxWidgets .

wxWidgets está escrito en C++, está maduro (desde 1992) y desarrollado activamente, está bien documentado y es multiplataforma. Es gratuito, tanto Gratis como de código abierto, pero se puede utilizar en proyectos comerciales.

Tomando sus ejemplos en orden:

  1. Cada mes el último sábado wxDateTime::SetToLastWeekDay
  2. Cada mes en el último día wxDateTime::SetToLastMonthDay
  3. Cada mes en el primer día solo se establece en el primer día del mes
  4. Todos los meses en el día # simplemente establezca el día # en el mes
  5. Cada mes el primer sábado wxDateTime::SetToWeekDay
  6. Cada # meses el primer sábado wxDateTime::SetToWeekDay en un bucle
  7. Cada # meses en el día # simplemente configure el día # en el mes en un ciclo
  8. Cada # meses el último sábado wxDateTime::SetToLastWeekDay en un bucle

No tiene que usar toda la biblioteca wxWidgets (que le brinda una biblioteca de desarrollo de GUI completa), solo puede usar partes de ella al no construirla como una biblioteca monolítica.

Miembros adicionales del tipo de calendario en wxDateTime:

  • Análisis y formato de fecha/hora
  • Comparaciones y cálculos de fecha/hora
  • Cálculos de zona horaria
  • Cálculos del calendario gregoriano/juliano
  • También incluye la mayoría de los días festivos de IsWorkDay en países seleccionados.
  • Sin límite de época: puede realizar cálculos en fechas anteriores a 1970. El rango de fechas admitidas va desde aproximadamente 4714 a. C. hasta unos 480 millones de años en el futuro.