English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Data e Hora no C# (DateTime)

O C# inclui a estrutura DateTime para manipulação de datas e horários.

Para usar data e hora no C#, use a palavra-chave new para criar um objeto da estrutura DateTime. Abaixo cria-se um objeto DateTime com valor padrão.

DateTime dt = new DateTime(); // Atribui valor padrão 01/01/0001 00:00:00

Os valores padrão e mínimo do objeto DateTime são 0001Ano1Mês100:00:00 (meia-noite). O valor máximo pode ser9999Ano12Mês31No final do dia11:59:59

Use diferentes construtores da estrutura DateTime para atribuir valor inicial a objetos DateTime.

//Atribui valor padrão 01/01/0001 00:00:00
DateTime dt1 = new DateTime(); 
//Atribui ano, mês, dia
DateTime dt2 = new DateTime(2015, 12, 31); 
//Atribui ano, mês, dia, hora, min, segundos
DateTime dt3 = new DateTime(2015, 12, 31, 5, 10, 20);
 
//Atribui ano, mês, dia, hora, min, segundos, fuso horário UTC
DateTime dt4 = new DateTime(2015, 12, 31, 5, 10, 2, DateTimeKind.Utc);

No exemplo acima, especificamos o ano, mês e dia no construtor. O ano pode ser 0001até9999, o mês pode ser1até12, a data pode ser1até31. Qualquer valor fora desses intervalos configurado como outro valor causará exceção em tempo de execução.

DateTime dt = new DateTime(2015, 12, 32); //Gera exceção: dia fora do intervalo

Use diferentes construtores DateTime para configurar data, hora, fuso horário, calendário e regionalidade.

Ticks

Ticks é uma data e hora, a partir de 00:00:00.000 do calendário gregoriano1Mês1Desde o dia10O número de intervalos de 0 nanosécondes representa. Abaixo inicializamos um objeto DateTime com ticks.

DateTime dt = new DateTime(636370000000000000); 
DateTime.MinValue.Ticks;  //Mínimo de ticks
DateTime.MaxValue.Ticks; // Máximo de ticks

Campos estáticos do DateTime

A estrutura DateTime inclui campos estáticos, propriedades e métodos. Abaixo está um exemplo que demonstra os campos estáticos e propriedades importantes.

DateTime currentDateTime = DateTime.Now;  //Retorna a data e hora atual
DateTime todaysDate = DateTime.Today; // Retorna a data de hoje
DateTime currentDateTimeUTC = DateTime.UtcNow;// Retorna a data e hora UTC atual
DateTime maxDateTimeValue = DateTime.MaxValue; // Retorna o valor máximo de DateTime
DateTime minDateTimeValue = DateTime.MinValue; // Retorna o valor mínimo de DateTime

Escala de tempo (TimeSpan)

TimeSpan é uma estrutura usada para representar tempo em dias, horas, minutos, segundos e milissegundos.

DateTime dt = new DateTime(2015, 12, 31);
           
TimeSpan ts = new TimeSpan(25,20,55);
 
DateTime newDate = dt.Add(ts);
Console.WriteLine(newDate);//1/1/2016 1:20:55 AM

A subtração de duas datas resulta em TimeSpan.

DateTime dt1 = new DateTime(2015, 12, 31); 
DateTime dt2 = new DateTime(2016, 2, 2);
TimeSpan result = dt2.Subtract(dt1);//33.00:00:00

Operadores

Sobrecarga de estrutura DateTime+,-Os operadores ==!=,>,<,<=,>= simplificam a adição, subtração e comparação de datas. Isso nos facilita o manuseio de datas.

DateTime dt1 = new DateTime(2015, 12, 20);
DateTime dt2 = new DateTime(2016, 12, 31, 5, 10, 20); 
TimeSpan time = new TimeSpan(10, 5, 25, 50);
Console.WriteLine(dt2 + time); // 1/10/2017de manhã10:36:10
Console.WriteLine(dt2 - dt1); //377.05:10:20
Console.WriteLine(dt1 == dt2); //False
Console.WriteLine(dt1 != dt2); //True
Console.WriteLine(dt1 > dt2); //False
Console.WriteLine(dt1 < dt2); //True
Console.WriteLine(dt1 >= dt2); //False
Console.WriteLine(dt1 <= dt2);//True

Converter DateTime para String

A estrutura DateTime contém os seguintes métodos para converter datas e horários em strings.

MétodoDescrição
ToString

Converte o valor DateTime para uma string com um formato especificado na região atual.

ToShortDateString

Converte o valor DateTime para uma string de data curta na região atual (M)./d/no formato yyyy).

ToShortTimeString

Converte o valor DateTime para uma string de tempo curto na região atual (h: mm: ss).

ToLongDateString

Converte o valor DateTime para uma string de data longa na região atual (dddd, MMMM d, yyyy).

ToLongTimeString

Converte o valor DateTime para uma string de tempo longo no formato da região atual (h:mm:ss tt).

O exemplo a seguir demonstra como converter DateTime para diferentes formatos de string.

var dt = DateTime.Now;
Console.WriteLine("Date String Current Culture: "); + dt.ToString("d"));
Console.WriteLine("MM/dd/yyyy Format:"); + dt.ToString("MM/dd/yyyy"));
Console.WriteLine("dddd, dd MMMM yyyy Format:"); + dt.ToString("dddd, dd MMMM yyyy"));
Console.WriteLine("MM/dd/yyyy h:mm tt Format:"); + dt.ToString("MM/dd/yyyy h:mm tt"));
Console.WriteLine("MMMM dd Format:"); + dt.ToString("MMMM dd"));
Console.WriteLine("HH:mm:ss Format:"); + dt.ToString("HH:mm:ss"));
Console.WriteLine("hh:mm tt Format:"); + dt.ToString("hh:mm tt"));
Console.WriteLine("Short Date String: "); + dt.ToShortDateString());
Console.WriteLine("Long Date String: "); + dt.ToLongDateString());
Console.WriteLine("Short Time String: "); + dt.ToShortTimeString());
Console.WriteLine("Long Time String: "); + dt.ToLongTimeString());

Converter string para DateTime

Os métodos Parse (), ParseExact (), TryParse () e TryParseExact () podem ser usados para converter strings de data e hora válidas em objetos DateTime.

Se a string especificada não for uma representação válida de data e hora, os métodos Parse () e ParseExact () lançarão uma exceção. Portanto, é recomendável usar os métodos TryParse () ou TryParseExact (), pois, se a string for inválida, eles retornarão false.

var str = "5/12/2020";
DateTime dt;
            
var isValidDate = DateTime.TryParse(str, out dt);
if(isValidDate)
    Console.WriteLine(dt);
else
    Console.WriteLine($"{str} não é uma string de data válida");