Introducción
Vali-Tempo es un ecosistema .NET modular construido para la precisión temporal. Ofrece diez paquetes NuGet especializados que cubren todos los aspectos del manejo de fechas, horas, calendarios, duraciones, programación, feriados y zonas horarias — todos diseñados para funcionar en conjunto a través de una sola llamada de inyección de dependencias, o de forma independiente como utilidades autónomas.
¿Por qué Vali-Tempo?
Trabajar con el tiempo en .NET es sorprendentemente frágil. La BCL proporciona DateTime, TimeSpan y DateTimeOffset — pero te deja implementar patrones comunes como:
- Convertir entre unidades de tiempo con precisión decimal
- Consultar días laborables considerando feriados específicos de cada país
- Calcular edades exactas a partir de fechas de nacimiento (especialmente cerca del 29 de febrero)
- Construir horarios recurrentes con reglas de recurrencia complejas
- Convertir entre zonas horarias IANA con conciencia de horario de verano
- Enumerar, dividir y combinar rangos de fechas
Vali-Tempo resuelve todo esto con una API coherente y compatible con DI, distribuida en nueve módulos especializados, más un meta-paquete que los integra todos.
Ecosistema de módulos
| Paquete | Descripción | Tipo clave |
|---|---|---|
| Vali-Time | Conversiones de unidades de tiempo y formateo con precisión decimal | IValiTime, IValiDate |
| Vali-Range | Operaciones con rangos de fechas: unión, intersección, brechas, división, enumeración | IValiRange, DateRange |
| Vali-Calendar | Calendario laboral con soporte para proveedores de feriados intercambiables | IValiCalendar, CalendarWeek |
| Vali-Duration | Tipo de valor Duration decimal de alta precisión | ValiDuration |
| Vali-CountDown | Seguimiento de plazos, cuenta regresiva y utilidades de progreso | IValiCountDown |
| Vali-Age | Cálculo de edad a partir de una fecha de nacimiento | IValiAge, AgeResult |
| Vali-Schedule | Constructor fluido para horarios recurrentes | IValiSchedule |
| Vali-Holiday | Datos de feriados de más de 35 países con feriados móviles basados en Pascua | IValiHoliday, HolidayInfo |
| Vali-TimeZone | Conversión de más de 45 zonas horarias IANA seleccionadas con soporte para horario de verano | IValiTimeZone, ValiZoneInfo |
| Vali-Tempo | Meta-paquete — incluye los 9 módulos anteriores | — |
Descripción general de la arquitectura
Los nueve servicios se registran como singletons en el contenedor de DI. No comparten estado mutable entre llamadas, lo que los hace seguros para su uso concurrente durante toda la vida útil de la aplicación.
AddValiTempo()
├── IValiTime (Vali-Time)
├── IValiDate (Vali-Time)
├── IValiRange (Vali-Range)
├── IValiCalendar (Vali-Calendar)
├── IValiCountDown (Vali-CountDown)
├── IValiAge (Vali-Age)
├── IValiSchedule (Vali-Schedule)
├── IValiHoliday (Vali-Holiday)
└── IValiTimeZone (Vali-TimeZone)
Cada paquete también puede instalarse y usarse de forma independiente. No necesitas el meta-paquete para usar un solo módulo.
Configuración de DI
Instala el meta-paquete:
dotnet add package Vali-Tempo
Registra todos los servicios en Program.cs:
builder.Services.AddValiTempo();
Esta única llamada registra los nueve servicios. Ahora puedes inyectar cualquiera de ellos:
public class ReportService(
IValiDate date,
IValiAge age,
IValiHoliday holiday,
IValiTimeZone tz)
{
public void GenerateReport(DateTime birthdate, DateTime deadline)
{
var userAge = age.Years(birthdate);
var daysLeft = date.Diff(DateTime.Today, deadline, TimeUnit.Days);
var isHoliday = holiday.IsHoliday(deadline, "PE");
var localTime = tz.Convert(deadline, "America/Lima");
}
}
Características clave de un vistazo
- Precisión decimal — las conversiones de tiempo usan aritmética
decimal, evitando la deriva de punto flotante - Tipos de valor —
DateRangeyValiDurationson structs; sin asignaciones en el heap para operaciones comunes - Diseño DI-first — cada servicio se registra detrás de una interfaz, haciendo las pruebas triviales
- Inteligencia de feriados — feriados móviles basados en Pascua calculados algorítmicamente para más de 35 países
- Soporte de zonas horarias IANA — más de 45 zonas seleccionadas con horario de verano, diferencia de offsets y comparación de instantes
- Programación fluida — encadena
Every().On().At().StartingFrom()para expresar reglas de recurrencia complejas - Rangos componibles — unión, intersección, expansión, reducción, división, enumeración con una sola cadena de métodos
Próximos pasos
- Inicio rápido — instala y ejecuta tu primer ejemplo en minutos
- Descripción general de Vali-Time — conversiones y formateo de unidades de tiempo
- Proveedores de Vali-Holiday — registra proveedores de feriados para tus países
- Referencia de paquetes — los 10 paquetes NuGet con enlaces y marcos de destino