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

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

Trabalhando com datas em C# (.NET): de ferramentas nativas a bibliotecas especializadas



Trabalhar com datas e horas é uma das tarefas principais no desenvolvimento de qualquer aplicação: desde serviços web até utilitários de desktop. A plataforma .NET fornece ferramentas nativas poderosas, como DateTime, DateTimeOffset e TimeSpan. No entanto, em cenários complexos (trabalho com fusos horários, intervalos legíveis por humanos, análise de formatos não padronizados), os desenvolvedores frequentemente recorrem a bibliotecas de terceiros. Neste artigo, vamos explorar as principais ferramentas para trabalhar com datas em C#.



1. Ferramentas nativas do .NET



Tipos básicos para trabalhar com datas no .NET:



  • DateTime — representa um momento no tempo (data + hora). Suporta operações de adição, subtração e comparação.
  • DateTimeOffset — análogo ao DateTime, mas com indicação explícita do deslocamento em relação ao UTC. Recomendado para armazenar datas em sistemas distribuídos.
  • TimeSpan — intervalo de tempo (por exemplo, 2 horas e 30 minutos).
  • DateOnly e TimeOnly (a partir do .NET 6) — para armazenamento separado de data e hora sem dados extras.


Exemplo de uso do DateTime:

using System;

DateTime now = DateTime.Now;DateTime utcNow = DateTime.UtcNow;DateTime specificDate = new DateTime(2025, 3, 15, 14, 30, 0);

// Formataçãostring formatted = now.ToString("dd.MM.yyyy HH:mm:ss");Console.WriteLine(formatted); // 15.03.2025 14:30:00

// AritméticaDateTime tomorrow = now.AddDays(1);TimeSpan diff = tomorrow - now;Console.WriteLine($"Até amanhã: {diff.TotalHours} horas");


Análise de datas a partir de strings:

string dateStr = "2025-03-15";if (DateTime.TryParse(dateStr, out DateTime result)){    Console.WriteLine(result.ToShortDateString());}

// Análise com especificação de culturavar culture = new System.Globalization.CultureInfo("ru-RU");DateTime parsed = DateTime.Parse("15 de março de 2025", culture);


2. Noda Time — trabalho avançado com datas e horas



Noda Time — uma biblioteca alternativa da comunidade, criada para eliminar as deficiências do DateTime nativo. Principais características:



  • Separação clara de conceitos: Instant (momento em UTC), LocalDateTime (data+hora sem vínculo com fuso), ZonedDateTime (com fuso horário).
  • Suporte completo a fusos horários através do banco de dados IANA (Olson).
  • Tipos imutáveis (immutable) — seguros em código multi-thread.
  • Intervalos legíveis por humanos (Period): 2 anos, 3 meses, 5 dias.


Exemplo de trabalho com Noda Time:

using NodaTime;using NodaTime.Text;

// Momento atual em UTCInstant now = SystemClock.Instance.GetCurrentInstant();Console.WriteLine($"Instant: {now}");

// Conversão para hora local com fuso horárioDateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(zone);Console.WriteLine($"Hora em Moscou: {moscowTime}");

// Análise de data em formato específicovar pattern = LocalDatePattern.CreateWithInvariantCulture("yyyy-MM-dd");LocalDate date = pattern.Parse("2025-03-15").Value;Console.WriteLine(date); // 15 de março de 2025

// Trabalho com períodosLocalDate start = new LocalDate(2025, 1, 1);LocalDate end = new LocalDate(2025, 12, 31);Period period = Period.Between(start, end, PeriodUnits.Days);Console.WriteLine($"Dias entre as datas: {period.Days}");


3. Humanizer — datas e intervalos legíveis por humanos



Humanizer — biblioteca para converter números, datas e strings em um formato amigável para humanos. No contexto de datas,

Recommendations