"Time is on my side...", este é um refrão de uma música tocada pelos Rolling Stones, que significa mais o menos o seguinte "O tempo esta do meu lado". O que significa isto? alguém pode pensar ao ler estas linhas. Calma , isto é apenas uma chamada para alertar que os desenvolvedores de aplicações não podem cantar o refrão sem pensar que na verdade "Time is against me...", i.e, o tempo está contra mim. Sabe porque ? Por que nos aproximamos do século XXI e o "Bug do Milênio" está cada vez mais perto. Vamos procurar entender a razão do problema e de como tratá-lo para evitar frustações futuras. Iremos nos ater apenas aos seguintes aplicativos da Microsoft utilizados em aplicaçoes desktop: Visual Basic e Access. Um Pouco de históriaPara todas as versões do Visual Basic ate a versão 3.0 , datas informadas com dois digitos (dd/mm/yy) , são consideradas como pertencentes ao seculo XX , i.e, 1900.
12/01/09 -----> 12/01/1909 |
01/01/00 -----> 01/01/1900 |
30/02/40 -----> 30/02/1940. |
12/01/09 -----> 12/01/2009 |
01/01/29 -----> 01/01/2029 |
30/02/40 -----> 30/02/1940. |
30/02/72 -----> 30/02/1972. |
Aplicativo | Regra |
---|---|
Aplicações de 16 bits: Access 2.0 , VB 3.0 | Todos os anos com dois dígitos são automaticamente considerados como do século 20 |
VB 4.0 16 bits | Todos os anos com dois dígitos são do século corrente (definido pelo relógio do sistema). |
Access 95 (com a nova biblioteca), VB 4.0 32 bits, VB5 , Access 97 | Todos os anos com dois dígitos entre 00 e 29 são do século XXI e os demais do século XX |
1-abra o Explorer e no diretório System; 2-localize o arquivo OLEAUT32.DLL; 3-Clique com o botão direito do mouse sobre o arquivo; 4-Selecione propriedades; 5-Selecione a ficha Versão e clique em Versão do Produto; 6-Se o número da versão for igual ou superior a 2.20.4049 a nova regra esta sendo usada. |
Private Sub cmdConvertDate_Click() Dim strYear As String Dim intSlash As Integer If IsDate(txtDate) or txtDate = "2/29/00" Then 'procura primeiro separador intSlash = InStr(txtDate, "/") If intSlash > 0 Then 'procura segundo separador intSlash = InStr(intSlash + 1, txtDate, "/") If intSlash > 0 Then 'Extrai ano da data strYear = Mid(txtDate, intSlash + 1) If Len(strYear) = 2 Then If CInt(strYear) < 50 Then ' Menor que 50: ano = 20XX. strYear = "20" & strYear Else ' Maior que 50: ano = 19XX. strYear = "19" & strYear End If End If MsgBox "Data Informada: " & txtDate MsgBox "ANO (Sua Regra): " & strYear MsgBox "ANO (Regra do VB): " & Year(txtDate) Else MsgBox "Data no formato não esperado!" End If Else MsgBox "Data no formato não esperado!" End If Else MsgBox "Data inválida !" End If ' Limpando a data no texto txtDate.Text = Left(txtDate.Text, intSlash) & strYear End Sub |