2016-03-27 5 views
-1

Ich versuche, Alter von Daten zu berechnen. Dies funktioniert auf dem Servercomputer, aber nicht auf einem bestimmten Client, bei dem der Fehler "Die Zeichenfolge 07/21/2016 kann nicht in ein Datum konvertiert werden" angezeigt wird. Ich fand heraus, dass das Gebietsschema des Servers auf en-US festgelegt war und der Client mit Fehlergebietsschema auf en-UK festgelegt ist. Ich habe den folgenden Code ausprobiert, um die Altersberechnung unabhängig vom Gebietsschema des Systems zu ermöglichen, aber es hat nicht funktioniert.Berechne das Alter von zwei Daten vb.net

Dim var as string = "07/30/2010" 
Dim dob As String = Format(CDate(var & " 01:00:00"), "dd-MM-yyyy hh:mm:ss") 
Dim dob1 As Date = DateTime.ParseExact(dob, "dd-MM-yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture) 
Dim todayDate As String = Format(Date.Now, "dd-MM-yyyy hh:mm:ss") 
Dim todayDate1 As Date = DateTime.ParseExact(todayDate, "dd-MM-yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture) 
lblDob.Text = var & " (" & DateDiff(DateInterval.Year, dob1, todayDate1) - 1 & " yrs)" 
+0

Woher kommen die Daten? Benutzereingabe? – christophano

+0

Daten werden aus der Datenbank über den Server eingegeben, das obige Datum dient nur zur Veranschaulichung. – Diamond

+1

und ich nehme an (hoffe?) Sie sind als 'DateTime' in der Datenbank gespeichert? Warum überhaupt mit Saiten belästigen? – christophano

Antwort

1

Dies ist, wie ich Ihren Code vereinfacht und es funktioniert:

Dim userBirthDateText = "07/30/2010" 
    Dim userBirthDate = Date.ParseExact(userBirthDateText.Replace("/", "-"), "MM-dd-yyyy", Nothing) 
    Dim currentDate = Date.Now 
    Dim age = Math.Floor(currentDate.Subtract(userBirthDate).TotalDays/365) 

Beachten Sie, dass ich „/“ durch ersetzen „-“, um die Reisedaten ein „Problem slash“ zu umgehen (was ist hier dokumentiert: Why can't DateTime.ParseExact() parse "9/1/2009" using "M/d/yyyy").

Auch: Ich vereinfache den Teil über "wie man die Zeitspanne in Jahren bekommt" (meine Vereinfachung: teile es einfach durch 365). Wenn Sie es genauer machen wollen, wird es mehr Arbeit brauchen: Format A TimeSpan With Years.

+0

Danke, funktioniert perfekt und danke nochmal für den Link. – Diamond

+0

Es wäre einfacher, 'Dim userBirthDate = New DateTime (2010, 7, 30)' zu verwenden. –

0

Ich hatte immer noch Probleme mit der Zeit bei der Verwendung der @ XavierPena-Methode, aber eine allround-Methode, die ich in allen Fällen arbeitete, ist wie folgt;

'date can be in any form and this method worked for either US or UK locale 
'this method always solve the problem of date settings e.g 9/24/2016 or 09/24/2016 
Dim age as string = "07/30/2010" 
'age 
    Try 
     Dim birthDate = Date.ParseExact(age.replace("/", "-"), "MM-dd-yyyy", Nothing) 
     Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 

    Catch ex As Exception 
     Try 
      Dim birthDate = Date.ParseExact(age.replace("/", "-"), "M-dd-yyyy", Nothing) 
      Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
     Catch ex2 As Exception 
      Try 
       Dim birthDate = Date.ParseExact(age.replace("/", "-"), "M-d-yyyy", Nothing) 
       Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
      Catch ex3 As Exception 
       Try 
        Dim birthDate = Date.ParseExact(age.replace("/", "-"), "MM-d-yyyy", Nothing) 
        Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
       Catch ex4 As Exception 
        Try 
         Dim birthDate = Date.ParseExact(age.replace("/", "-"), "dd-MM-yyyy", Nothing) 
         Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
        Catch ex5 As Exception 
         Try 
          Dim birthDate = Date.ParseExact(age.replace("/", "-"), "dd-M-yyyy", Nothing) 
          Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
         Catch ex6 As Exception 
          Try 
           Dim birthDate = Date.ParseExact(age.replace("/", "-"), "d-M-yyyy", Nothing) 
           Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
          Catch ex7 As Exception 
           Dim birthDate = Date.ParseExact(age.replace("/", "-"), "d-MM-yyyy", Nothing) 
           Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays/365) & " yrs") 
          End Try 
         End Try 

        End Try 
       End Try 
      End Try 
     End Try 

    End Try 
Verwandte Themen