Resumo : neste tutorial, você aprenderá sobre C# DateOnly
e como usá-lo de forma eficaz para gerenciar dados somente de data.
Introdução ao tipo C# DateOnly
O .NET 6 introduziu o DateOnly
tipo que representa uma data específica sem um componente de hora. Assim como o DateTime
tipo, o DateOnly
tem um intervalo de 0001-01-01
até 9999-12-31
.
O DateOnly
tipo é adequado para representar uma data específica, como data de nascimento, data da fatura e data de vencimento.
O DateOnly
é uma estrutura, portanto é imutável. Em outras palavras, a DateOnly
não pode ser alterado depois de criado.
Para criar um novo DateOnly
objeto, você usa o seguinte construtor:
DateOnly(int year, int month, int day);
Linguagem de código: C# ( cs )
Por exemplo, o seguinte cria um DateOnly
objeto que representa January 31, 2023
:
var d = new DateOnly(2023, 1, 31);
Linguagem de código: C# ( cs )
O DateOnly
objeto possui as propriedades Year
, Month
e Day
que representam o ano, mês e dia da data:
using static System.Console;
var d = new DateOnly(2023, 1, 31);
WriteLine(d.Year);
WriteLine(d.Month);
WriteLine(d.Day);
Linguagem de código: C# ( cs )
Saída:
2023
1
31
Linguagem de código: C# ( cs )
Além disso, você pode usar o Parse()
método estático da DateOnly
classe para analisar uma sequência de data em uma DateOnly
instância.
Por exemplo, o seguinte analisa a string "2023-01-31"
em uma DateOnly
instância:
var d = DateOnly.Parse("2023-01-31");
Linguagem de código: C# ( cs )
Operações somente data
Depois de ter um DateOnly
objeto, você pode usá-lo para realizar diversas operações, como comparar dois DateOnly
objetos, adicionar ou subtrair dias, meses ou anos de um DateOnly
objeto e formatar um DateOnly
objeto como uma string.
Comparando dois objetos DateOnly
O exemplo a seguir ilustra como comparar dois DateOnly
objetos:
using static System.Console;
var d1 = DateOnly.Parse("2023-01-31");
var d2 = DateOnly.Parse("2023-01-30");
if (d1 < d2)
{
WriteLine($"{d1} is ealier than {d2}");
}
else
{
WriteLine($"{d1} is after than {d2}");
}
Linguagem de código: C# ( cs )
Saída:
1/31/2023 is after than 1/30/2023
Linguagem de código: C# ( cs )
Adicionando ou subtraindo dias, meses ou anos de uma instância DateOnly
O exemplo a seguir ilustra como adicionar 7 dias a um DateOnly
objeto:
using static System.Console;
var d = new DateOnly(2023, 1, 31);
var sevenDaysLater = d.AddDays(7);
WriteLine(sevenDaysLater.ToString());
Linguagem de código: C# ( cs )
Saída:
2/7/2023
Linguagem de código: C# ( cs )
Para subtrair o número de dias de um DateOnly
objeto, você também usa o AddDays()
método, mas passa um número negativo como este:
using static System.Console;
var d = new DateOnly(2023, 1, 31);
var sevenDaysBefore = d.AddDays(-7);
WriteLine(sevenDaysBefore.ToString());
Linguagem de código: C# ( cs )
Saída:
1/24/2023
Linguagem de código: C# ( cs )
Como os métodos AddDays()
, AddMonths()
e AddYears()
retornam um DateOnly
objeto, você pode encadeá-los.
Por exemplo, o seguinte adiciona 2 meses e 1 ano a um DateOnly
objeto:
using static System.Console;
var d = new DateOnly(2023, 1, 31);
var newDate= d.AddMonths(2).AddYears(1);
WriteLine(newDate.ToString());
Linguagem de código: C# ( cs )
Saída:
3/31/2024
Linguagem de código: C# ( cs )
Formatando um objeto DateOnly como uma string
O seguinte formata um DateOnly
objeto como uma string:
using static System.Console;
var d = new DateOnly(2023, 1, 31);
WriteLine(d.ToString("D"));
Linguagem de código: C# ( cs )
Saída:
Tuesday, January 31, 2023
Linguagem de código: C# ( cs )
Neste exemplo, usamos o especificador de formato “D” para formatar o DateOnly
objeto. Para uma string de formato de data abrangente, confira esta página .
DataSomente vs. Datahora
A tabela a seguir compara o DateOnly
com o DateTime
tipo:
Recurso | Somente data | Data hora |
---|---|---|
Representa | Uma data sem componente de tempo | Um componente de data e hora |
Imutável | Sim | Não |
Tamanho | 8 bytes | 16 bytes |
Serialização | Serializa apenas o componente de data | Serializa os componentes de data e hora |
Casos de uso | Quando você só precisa representar uma data, como um aniversário ou um feriado | Quando você precisa representar uma data e hora, como um carimbo de data/hora ou horário de uma reunião |
Resumo
- Use o
DateOnly
tipo C# para trabalhar com dados somente de data.