C# - Calculando a diferença entre duas datas
Hoje veremos como calcular a diferença entre duas datas usando a linguagem C#. |
A utilização de informações de data e hora em aplicações usando a linguagem C# podem ser muito diversas e essas informações podem ser usadas de várias maneiras.
Só para você
sentir o drama veja a seguir os usos mais comuns de informações de data e hora:
1 - Refletir apenas uma data, quando as informações sobre a hora não são
importantes;
2 - Refletir apenas a hora, quando a data em si não é importante;
3 - Refletir uma data e hora abstratas que não estejam vinculadas a um horário e
local específicos (por exemplo, a maioria das lojas em uma cadeia
internacional abre nos dias da semana às 9:00 da manhã).
4 - Recuperar informações de data e hora de fontes externas ao .NET, normalmente
onde as informações de data e hora são armazenadas em um tipo de dados simples.
5 - Identificar de forma exclusiva e inequívoca um único ponto no tempo. Alguns
aplicativos exigem que uma data e hora não sejam ambíguas apenas no sistema
host; outros exigem que seja inequívoco em todos os sistemas (isto é, uma
data serializada em um sistema pode ser desserializada de forma significativa e
usada em outro sistema em qualquer parte do mundo).
6 - Preservar vários horários relacionados (como a hora local do solicitante
e o horário de recebimento do servidor para uma requisição da Web).
7 - Realizar aritmética de data e hora, possivelmente com um resultado que
identifique de forma única e inequívoca um único ponto no tempo.
(fonte:
https://docs.microsoft.com/en-us/dotnet/standard/datetime/choosing-between-datetime)
Isso posto, vamos ao nosso humilde projeto que calcula a diferença entre duas datas escolhidas.
Criando o projeto no VS 2017 Community
Usando o Visual Studio 2017 Community no menu File clique em New Project;
A seguir selecione Visual C# -> Windows Desktop;
Selecione o template Windows Forms App(.NET Framework);
Informe um nome a seu gosto. Para o exemplo vou informar CShp_DifDatas;
No formulário Form1.cs inclua os seguintes controles a partir da ToolBox:
Disponha os controles conforme o leiaute da figura abaixo:
Agora vamos criar uma classe chamada CalculaDiferencaDatas() com o código conforme mostrado a seguir:
using System;
namespace CShp_DifDatas
{
public class CalculaDiferencaDatas
{
/// <summary>
/// definindo os números de dias em um mês; index 0=> janeiro e 11=> Dezembro
/// fevereiro contém ou 28 ou 29 dias, por isso temos o valor -1
/// o que iremos usar para calcular
/// </summary>
private int[] diasDoMes = new int[12] { 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
/// <summary>
/// contém a data inicial
/// </summary>
private DateTime dataInicial;
/// <summary>
/// contém a data final
/// </summary>
private DateTime dataFinal;
public CalculaDiferencaDatas(DateTime d1, DateTime d2)
{
int incremento;
if (d1 > d2)
{
this.dataInicial = d2;
this.dataFinal = d1;
}
else
{
this.dataInicial = d1;
this.dataFinal = d2;
}
///
/// Calculo dos dias
///
incremento = 0;
if (this.dataInicial.Day > this.dataFinal.Day)
{
incremento = this.diasDoMes[this.dataInicial.Month - 1];
}
/// se for fevereiro
/// se o dia for menor que o dia de hoje
if (incremento == -1)
{
if (DateTime.IsLeapYear(this.dataInicial.Year))
{
// ano bissexto -> fevereiro contém 29 dias
incremento = 29;
}
else
{
incremento = 28;
}
}
if (incremento != 0)
{
Dias = (this.dataFinal.Day + incremento) - this.dataInicial.Day;
incremento = 1;
}
else
{
Dias = this.dataFinal.Day - this.dataInicial.Day;
}
///
///calculo do mês
///
if ((this.dataInicial.Month + incremento) > this.dataFinal.Month)
{
this.Meses = (this.dataFinal.Month + 12) - (this.dataInicial.Month + incremento);
incremento = 1;
}
else
{
this.Meses = (this.dataFinal.Month) - (this.dataInicial.Month + incremento);
incremento = 0;
}
///
/// calculo do ano
///
this.Anos = this.dataFinal.Year - (this.dataInicial.Year + incremento);
}
public override string ToString()
{
return this.Anos + " Anos(s), " + this.Meses + " mes(es), " + this.Dias + " dia(s)";
}
public int Anos { get; }
public int Meses { get; }
public int Dias { get; }
}
}
|
A seguir vamos definir o código do formulário no evento Click do botão de comando btnCalculaDiferencaDatas e no evento FormClosed():
Executando o projeto e selecionando duas datas teremos o seguinte resultado:
Pegue o projeto aqui : CShp_DifDatas.zip
"E, quanto
fizerdes por palavras ou por obras, fazei tudo em nome do Senhor Jesus, dando
por ele graças a Deus Pai."
Colossenses 3:17
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Calculando a idade com precisão - Macoratti
Algumas funções com datas... - Macoratti
Cálculo com datas e horas - Macoratti
VB .NET - Calculando a diferença entre duas datas ... - Macoratti