Ir al contenido principal

Inicio rápido

Pon en marcha Vali-Tempo en menos de cinco minutos.

1. Instala el paquete

Para usar todos los módulos, instala el meta-paquete:

dotnet add package Vali-Tempo

Para instalar módulos individuales, agrega solo lo que necesitas:

dotnet add package Vali-Time
dotnet add package Vali-Range
dotnet add package Vali-Calendar
dotnet add package Vali-Duration
dotnet add package Vali-CountDown
dotnet add package Vali-Age
dotnet add package Vali-Schedule
dotnet add package Vali-Holiday
dotnet add package Vali-TimeZone

2. Registra los servicios

En Program.cs (o donde configures tu contenedor de DI), llama a AddValiTempo():

using ValiTempo.Extensions;

var builder = WebApplication.CreateBuilder(args);

// Registra los 9 servicios de Vali-Tempo como singletons
builder.Services.AddValiTempo();

var app = builder.Build();
app.Run();

Si instalaste paquetes individuales, puedes registrarlos por separado:

builder.Services.AddValiTime();
builder.Services.AddValiHoliday();
builder.Services.AddValiTimeZone();

3. Primeros ejemplos

Conversión de unidades de tiempo

public class TimerService(IValiTime time)
{
public string FormatDuration(decimal totalSeconds)
{
// Convierte segundos a horas con 2 decimales
decimal hours = time.Convert(totalSeconds, TimeUnit.Seconds, TimeUnit.Hours);

// Obtiene la mejor unidad legible para humanos automáticamente
TimeUnit best = time.GetBestUnit(totalSeconds, TimeUnit.Seconds);

// Formatea con esa unidad
return time.FormatTime(totalSeconds, TimeUnit.Seconds, 1);
// → "2.5 minutes" o "1.3 hours", etc.
}
}

Diferencia de fechas

public class ProjectService(IValiDate date)
{
public void PrintDeadlineInfo(DateTime deadline)
{
decimal daysLeft = date.Diff(DateTime.Today, deadline, TimeUnit.Days);
bool isWeekend = date.IsWeekend(deadline);
int week = date.WeekOfYear(deadline);

Console.WriteLine($"Days left: {daysLeft}");
Console.WriteLine($"Deadline falls on weekend: {isWeekend}");
Console.WriteLine($"Week of year: {week}");
}
}

Cálculo de edad

public class UserService(IValiAge age)
{
public void DisplayAge(DateTime birthdate)
{
int years = age.Years(birthdate);
AgeResult exact = age.Exact(birthdate);
bool isBirthday = age.IsBirthday(birthdate);

Console.WriteLine($"Age: {years} years");
Console.WriteLine($"Exact: {exact.Years}y {exact.Months}m {exact.Days}d");

if (isBirthday)
Console.WriteLine("Happy birthday!");

DateTime next = age.NextBirthday(birthdate);
int daysUntil = age.DaysUntilBirthday(birthdate);
Console.WriteLine($"Next birthday: {next:MMM dd} ({daysUntil} days)");
}
}

Verificación de feriados

public class CalendarService(IValiHoliday holiday, IValiCalendar calendar)
{
public void SetupHolidays()
{
// Registra proveedores de feriados para tus países
var providers = HolidayProviderFactory.CreateLatinAmerica();
foreach (var provider in providers)
holiday.Register(provider);
}

public bool IsWorkday(string country, DateTime date)
{
return !holiday.IsHoliday(country, date)
&& calendar.IsWorkday(date);
}

public IEnumerable<HolidayInfo> GetUpcomingHolidays(string country, DateTime from)
{
return holiday.GetHolidays(country, from.Year)
.Where(h => h.Date >= from)
.OrderBy(h => h.Date);
}
}

Conversión de zonas horarias

public class MeetingService(IValiTimeZone tz)
{
public void ScheduleGlobalMeeting(DateTime utcTime)
{
// Convierte a distintas representaciones de zona horaria
DateTime lima = tz.Convert(utcTime, "UTC", "America/Lima");
DateTime madrid = tz.Convert(utcTime, "UTC", "Europe/Madrid");
DateTime tokyo = tz.Convert(utcTime, "UTC", "Asia/Tokyo");

Console.WriteLine($"Lima: {lima:HH:mm}");
Console.WriteLine($"Madrid: {madrid:HH:mm}");
Console.WriteLine($"Tokyo: {tokyo:HH:mm}");

// Verifica el estado de horario de verano
bool limaInDst = tz.IsDst("America/Lima", lima);
bool madridInDst = tz.IsDst("Europe/Madrid", madrid);
}
}

4. Usar módulos específicos de forma autónoma

Si solo instalaste Vali-Age, puedes registrarlo directamente:

builder.Services.AddValiAge();

Cada módulo incluye su propio método de extensión: AddValiTime(), AddValiRange(), AddValiCalendar(), AddValiDuration(), AddValiCountDown(), AddValiAge(), AddValiSchedule(), AddValiHoliday(), AddValiTimeZone().

5. Pruebas

Como cada servicio se registra detrás de una interfaz, crear mocks es trivial:

var mockAge = new Mock<IValiAge>();
mockAge.Setup(a => a.Years(It.IsAny<DateTime>())).Returns(30);

var service = new UserService(mockAge.Object);
service.DisplayAge(new DateTime(1993, 5, 10));

Próximos pasos