 Visual Basic - Datas e o ano 2000.
Visual Basic - Datas e o ano 2000.
"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
 |