VB.NET e o tratamento de datas


Se você sente arrepios só em pensar em trabalhar com datas e horas por achar a formatação de datas e horas um quesito muito complicado , relaxe... O VB.NET chegou para resolver este problema , as funções incluídas no Namespace String.DataTime prometem facilitar a nossa vida quando deparamos com a tarefa de formatar datas e horas...

As datas e horas no VB.NET são tratadas por ticks que guardam a quantidade de nano segundos a partir de 01/01/0001 12:00 AM e onde cada tick corresponde a 100 nanos segundos.

No VB.NET podemos usar as configurações regionais do Painel de Controle ou o Namespace System.Globalization.CultureInfo definindo a linguagem e o país de referência. O formato mais usado é o FormatDateTime(valor data,formato) onde os formatos permitidos são :

Podemos usar os seguintes formato de caracteres em uma formatação para o System.DataTime:

Formato usado Expressão usada Tipo
d MM/mm/yyyy ShortDate
D dddd,MMM dd,yyyy LongDate
f dddd,MMMM dd, yyyy HH:mm Data Completa
F dddd,MMMM dd, yyyy HH:mm:ss Data hora Completa
g MM/dd/yyyy HH:mm Data Geral
G MM/dd/yyyy HH:mm:ss Data Geral
M , m MMMM dd Mês / dia e Data
R,r ddd, dd MMM yyyy HH ':' mm ':' SS 'GMT' Padrão GMT
s yyyy-MM-dd HH:mm:ss Short Date Local
t HH:mm:ss Long Time
u yyyy-MM-dd HH:mm:ss Formato Universal
U dddd, MMMM dd, yyyy HH:mm:ss Universal completo
y MMMM , yyyy Mês / ano de uma Data
Tabela 1.0

As declarações Date e Time usadas no VB6 que usavam 4 bytes foram substituídas pelas declarações Today e TimeOfDay que usam o tipo de dado DateTime de 8 bytes:

Visual Basic 6.0 VB.NET
Date Today
Time TimeOfDay

Além disto o VB.NET possui a classe Calendar e a classe CultureInfo presentes no Namespace - System.Globalization onde podemos usar classes para outros calendários : Hebreu , Coreano , Japonês , etc. Pra que serve isto ?? Bem ,  você pode descobrir a data atual em diversos calendários sem muito esforço, afinal estamos em plena copa do mundo na Coréia e Japão ).  Vamos criar uma aplicação no VB.NET do tipo console e digitar o código abaixo:

Obs: Para lembrar como criar um aplicação do tipo console leia : Minha primeira aplicação VB.NET

Module Module1

Sub Main()

Dim arabe As New Globalization.HijriCalendar()

Dim japones As New Globalization.JapaneseCalendar()

Dim koreano As New Globalization.KoreanCalendar()

Console.WriteLine("No Calendário Ocidental hoje é dia : " & Today)

Console.WriteLine("No Calendário Arabe hoje é dia : " & arabe.GetDayOfMonth(Today) & "/" & arabe.GetMonth(Today) & "/" & arabe.GetYear(Today))

Console.WriteLine("No Calendário Japão hoje é dia : " & japones.GetDayOfMonth(Today) & "/" & japones.GetMonth(Today) & "/" & japones.GetYear(Today))

Console.WriteLine("No Calendário Coreano hoje é dia : " & koreano.GetDayOfMonth(Today) & "/" & koreano.GetMonth(Today) & "/" & koreano.GetYear(Today))

Console.Read()

End Sub

End Module

O resultado do processamento será :

A data atual em diversos Calendários no VB.NET

Voltando ao artigo temos que com base na tabela 1.0 podemos montar um formato para a data de acordo com as nossas necessidades . Vejamos um código exemplo envolvendo os formatos mais usados :

Module Module1

Sub Main()

Dim Data_hoje As DateTime = DateTime.Now

Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Data de hoje (DateTime.Now) : " & Data_hoje)
Console.WriteLine("------------------------------------------------- --")
Console.WriteLine("Formato - FormatDateTime(data,DateFormat.tipo_data)")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("General Date : " & FormatDateTime(Data_hoje, DateFormat.GeneralDate))
Console.WriteLine("LongDate : " & FormatDateTime(Data_hoje, DateFormat.LongDate))
Console.WriteLine("LongTime : " & FormatDateTime(Data_hoje, DateFormat.LongTime))
Console.WriteLine("ShortDate : " & FormatDateTime(Data_hoje, DateFormat.ShortDate))
Console.WriteLine("ShortTime : " & FormatDateTime(Data_hoje, DateFormat.ShortTime))

Console.Read()
End Sub

End Module

O resultado é o seguinte:

vamos agora usar os formatos fornecidos pelo VB.NET e ver o resultado. Vamos usar a função Format(data,formato) onde data é data que vamos formatar e formato o tipo de formatação aplicada. Veja o código como ficará:

Sub Main()

Dim Data_hoje As DateTime = DateTime.Now

Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Usando => Format(Data_hoje,'formato')")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Formato para dia ")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("d : " & Format(Data_hoje, "d"))
Console.WriteLine("dd : " & Format(Data_hoje, "dd"))
Console.WriteLine("ddd : " & Format(Data_hoje, "ddd"))
Console.WriteLine("dddd : " & Format(Data_hoje, "dddd"))
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Formato para mês ")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("M : " & Format(Data_hoje, "M"))
Console.WriteLine("MM : " & Format(Data_hoje, "MM"))
Console.WriteLine("MMM : " & Format(Data_hoje, "MMM"))
Console.WriteLine("MMMM : " & Format(Data_hoje, "MMM"))
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Formato para ano ")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Y : " & Format(Data_hoje, "y"))
Console.WriteLine("YY : " & Format(Data_hoje, "yy"))
Console.WriteLine("YYYY : " & Format(Data_hoje, "yyyy"))

Console.Read()
End Sub

End Module

Executando o código acima teremos:

Vejamos agora a formatação das horas usando a função Format(data,formato). O código é dado a seguir:

Module Module1

Sub Main()

Dim Data_hoje As DateTime = DateTime.Now

Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Usando => Format(Data_hoje,'formato')")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Hora atual hh:mm:ss : " & Format(Data_hoje, "hh:mm:ss"))
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Formato para horas ")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("hh : " & Format(Data_hoje, "hh"))
Console.WriteLine("HH : " & Format(Data_hoje, "HH"))
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Formato para minutos ")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("mm : " & Format(Data_hoje, "mm"))
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("Formato para segundos ")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("s : " & Format(Data_hoje, "ss"))

Console.Read()
End Sub

End Module

O resultado é o seguinte:

Novos Métodos e Propriedades para tratamento de datas no VB.NET

Agora veremos os principais métodos e propriedades para tratamento de datas presentes no VB.NET:

1- DateTime.DaysInMonth(year,month) - Retorna o número de dias em um mês e ano especificados.

Parâmetros : Ano(Year) e Mês(Month) (um número entre 1 e 12)

Ex: Se o mês for fevereiro -(mês igual a 2)- o valor retornado pode ser 28 ou 29 dependendo do ano informado.

Exceção : Erro que pode ser gerado em tempo de execução.

Tipo de Exeção(Exception Type) Condição

ArgumentOutOfRangeException

mês(month) é menor que 1 e maior que 12

Ex: DateTime.DaysInMonth(2002, 2)  irá retornar 28 , que é o número de dias do mês 02 para o ano de 2002.

2- DateTime.IsLeapYear(year) - Retorna True se o ano for bissexto e False se não for bissexto.

Parametro :  ano (year ) informado com quatro dígitos.Ex: 2002.

Ex: DateTime.IsLeapYear(2002)  irá retornar False , pois 2002 , não é bissexto.

3- DateTime.MaxValue - Representa o valor máximo definido em DateTime.

4- DateTime.MinValue - Representa o valor mínimo definido em DateTime.

A seguir o código e o resultado para os métodos acima:

Module Module1

Sub Main()

Dim Data_hoje As DateTime = DateTime.Now

Console.WriteLine("---------------------------------------------------")
Console.WriteLine(" Novos métodos p/ tratamento de datas no VB.NET")
Console.WriteLine("---------------------------------------------------")
Console.WriteLine("DaysInMonth(ano,mes): " & DateTime.DaysInMonth(2002, 2))
Console.WriteLine("MaxValue : " & DateTime.MaxValue)
Console.WriteLine("MinValue : " & DateTime.MinValue)
Console.WriteLine("IsLeapYear(ano) : " & DateTime.IsLeapYear(2002))

Console.Read()

End Sub

End Module

Para resumir um pouco veja abaixo uma tabela onde listamos quais os elementos da linguagem você pode usar para realizar determinada tarefa relacionada com data/hora:

Ação a realizar Elemento da linguagem a utilizar
Obter a Data e hora atual Now, Today, TimeOfDay
Realizar cálculos com datas DateAdd, DateDiff, DatePart
Retornar uma data. DateSerial, DateValue, MonthName, WeekDayName
Retornar uma hora.. TimeSerial, TimeValue
Definir Data e/ou hora.. DateString, TimeOfDay, TimeString, Today
Medir um processo. Timer

Na continuação deste artigo iremos abordar o cálculo envolvendo datas no VB.NET , até lá...


José Carlos Macoratti