Trabalho com datas em C# (.NET): visão geral de bibliotecas e ferramentas

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): visão geral completa de bibliotecas e ferramentas integradas



O processamento de datas e horas é uma das tarefas mais comuns no desenvolvimento. No ecossistema C# (.NET), existe tanto uma funcionalidade integrada poderosa (System.DateTime) quanto bibliotecas de terceiros que simplificam cenários complexos: trabalho com fusos horários, formatação, intervalos e análise. Neste artigo, abordaremos as principais ferramentas, incluindo os recursos modernos do .NET 6+ e pacotes NuGet populares.



1. Recursos integrados: DateTime, DateOnly, TimeOnly



A classe base System.DateTime está disponível desde as primeiras versões do .NET. Ela suporta:

  • Criação de data: new DateTime(2025, 3, 15)
  • Aritmética: date.AddDays(10), date.AddMonths(-1)
  • Comparação: date1 > date2
  • Formatação: date.ToString("yyyy-MM-dd")


A partir do .NET 6, surgiram os tipos DateOnly e TimeOnly — eles não têm vínculo com fuso horário e armazenam apenas data ou apenas hora. Isso é útil para aniversários, horários de trabalho e agendas.



using System;

DateOnly birthday = new DateOnly(1990, 5, 20);TimeOnly alarm = new TimeOnly(7, 30);

Console.WriteLine($"Data: {birthday}, Hora: {alarm}");// Saída: Data: 20.05.1990, Hora: 07:30


2. TimeSpan — intervalos de tempo



Para trabalhar com intervalos de tempo, usa-se TimeSpan. Ele permite calcular a diferença entre datas, duração de operações e timeouts.



DateTime start = DateTime.Now;// ... execução do código ...DateTime end = DateTime.Now;

TimeSpan elapsed = end - start;Console.WriteLine($"Decorrido: {elapsed.TotalSeconds} seg.");


3. Noda Time — trabalho avançado com datas



Noda Time (NuGet: NodaTime) — é uma biblioteca de Jon Skeet (autor de um livro popular sobre C#). Ela resolve problemas do DateTime:

  • Separação clara entre "momento no tempo" (Instant), "data no calendário" (LocalDate) e "hora com fuso" (ZonedDateTime).
  • Suporte a calendários (islâmico, hebraico, japonês).
  • Imutabilidade de todos os tipos.
  • Tratamento correto de fusos horários através do banco de dados IANA (tzdata).


using NodaTime;

Instant now = SystemClock.Instance.GetCurrentInstant();DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(zone);

Console.WriteLine($"Hora atual em Moscou: {moscowTime:yyyy-MM-dd HH:mm}");

// Trabalhando com LocalDateLocalDate today = LocalDate.FromDateTime(DateTime.Today);LocalDate nextWeek = today.PlusDays(7);


Noda Time é especialmente útil em projetos onde a precisão dos fusos horários é crítica (logs, reservas, sistemas internacionais).



4. Humanizer — datas legíveis por humanos



Humanizer (NuGet: Humanizer.Core) — biblioteca para converter números, datas e horas em linguagem natural. Ela é capaz de:

  • Mostrar tempo relativo: "3 minutos atrás", "em 2 dias".
  • Flexionar nomes de meses e dias da semana.
  • Formatar intervalos de tempo: "1 hora 30 minutos".


using Humanizer;

DateTime pastDate = DateTime.UtcNow.AddHours(-5);Console.WriteLine(pastDate.Humanize()); // "5 horas atrás"

TimeSpan span = new TimeSpan(2, 45, 0);Console.WriteLine(span.Humanize()); // "2 horas 45 minutos"


Humanizer suporta localização (português — Humanizer.Core.pt).



5. FluentDateTime — interface fluente para DateTime



FluentDateTime (NuGet: FluentDateTime) — adiciona métodos de extensão para uma

Recommendations