Trabalho com datas em C# (.NET): ferramentas integradas e bibliotecas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com datas em C# (.NET): ferramentas integradas e bibliotecas populares



Trabalhar com datas e horas é uma das tarefas essenciais em qualquer desenvolvimento sério. No ecossistema C# (.NET), existem tanto tipos integrados poderosos (DateTime, DateTimeOffset, TimeSpan) quanto bibliotecas de terceiros que simplificam operações complexas — como lidar com fusos horários, representação legível para humanos e parsing de formatos não padronizados. Neste artigo, analisaremos detalhadamente as principais ferramentas para trabalhar com datas em C#.



Tipos integrados do .NET



A classe base System.DateTime fornece métodos para criação, comparação, aritmética e formatação de datas. Ela suporta um intervalo de 01/01/0001 a 31/12/9999.



// Criação de dataDateTime now = DateTime.Now;                // hora localDateTime utcNow = DateTime.UtcNow;          // UTCDateTime specific = new DateTime(2025, 3, 15, 14, 30, 0);

// AritméticaDateTime tomorrow = now.AddDays(1);TimeSpan diff = tomorrow - now;Console.WriteLine(diff.TotalHours); // 24

// Parsingstring dateStr = "2025-12-31";DateTime parsed = DateTime.Parse(dateStr, CultureInfo.InvariantCulture);

// FormataçãoConsole.WriteLine(now.ToString("dd.MM.yyyy HH:mm")); // 15.03.2025 14:30


DateTimeOffset é uma versão aprimorada que armazena o deslocamento em relação ao UTC. É recomendado para aplicações que trabalham com diferentes fusos horários.



DateTimeOffset nowOffset = DateTimeOffset.Now;Console.WriteLine(nowOffset.Offset); // +03:00 (depende do sistema)


TimeSpan — para representar intervalos de tempo. Ideal para medir a duração de operações.



TimeSpan duration = new TimeSpan(2, 15, 30); // 2 horas 15 minutos 30 segundosConsole.WriteLine(duration.TotalMinutes);     // 135.5


Biblioteca NodaTime



NodaTime é uma biblioteca alternativa para trabalhar com datas e horas, criada por Jon Skeet (autor de livros sobre C#). Ela resolve muitos problemas do DateTime, como ambiguidade e falta de tipagem forte para zonas horárias.



Instalação via NuGet:

dotnet add package NodaTime


Tipos principais:

  • Instant — um momento no tempo (análogo ao Unix timestamp)
  • LocalDateTime — data+hora sem vínculo com fuso horário
  • ZonedDateTime — data+hora em um fuso horário específico
  • Duration e Period — intervalos (análogos ao TimeSpan, mas Period considera unidades de calendário)


using NodaTime;

// Momento atual em UTCInstant now = SystemClock.Instance.GetCurrentInstant();Console.WriteLine(now.ToDateTimeUtc()); // pode ser convertido para DateTime

// Trabalhando com fusos horáriosDateTimeZone tz = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(tz);Console.WriteLine(moscowTime); // 2025-03-15T17:30:00 Europe/Moscow (+03)

// Period — diferença em unidades de calendárioLocalDate start = new LocalDate(2024, 1, 1);LocalDate end = new LocalDate(2025, 3, 15);Period period = Period.Between(start, end);Console.WriteLine($"Passaram {period.Years} anos, {period.Months} meses, {period.Days} dias");// Passaram 1 anos, 2 meses, 14 dias


Vantagens do NodaTime: tipagem forte, trabalho correto com fusos horários históricos, suporte a calendários (islâmico, hebraico, etc.), ausência de ambiguidades na mudança de horário.



Biblioteca Humanizer



Humanizer é uma biblioteca para "humanizar" dados, incluindo datas e intervalos. Ela permite exibir datas de forma legível: "ontem", "daqui a 3 horas", "2 dias atrás".



Instalação:

dotnet add package Humanizer


Exemplos de uso

Recommendations