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