 VB.NET
e o tratamento de datas
 
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.
Ex: Se o mês for fevereiro -(mês igual a 2)- o valor retornado pode ser 28 ou 29 dependendo do ano informado.
| Tipo de Exeção(Exception Type) | Condição | 
|---|---|
| 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.
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