2010-07-28 5 views
0

J'ai fonction suivante pour obtenir le temps utc. dtuniversal Je passe à str procuré du temps de type de données de serveur sql. cela fonctionne bien jusqu'à 18 heures de l'Est (qui est de 23 utc) il échoue à 19 heures de l'Est (qui est de 24 utc) Je reçois une erreur "Valeur invalide pour cette métadonnée".convertir heure locale à utc

Private Function GetUTCTime(ByVal time As TimeSpan) As TimeSpan 

    Dim dt As New DateTime(time.Ticks) 
    dt = dt.ToUniversalTime() 
    Dim dtUniversal As New TimeSpan(dt.Ticks) 
    Return dtUniversal 

End Function 
+0

Ce n'est pas un message d'erreur documenté. Copiez et collez-le * exactement * tel qu'affiché. –

+0

C'est le message que je reçois. Je ne peux pas coller l'image ici. System.ArgumentException {"Valeur non valide pour cette métadonnée."} – user228777

+0

Nous avons besoin d'un exemple court mais complet qui reproduit le problème. Vous devrez inclure la valeur passée en argument au paramètre 'time' de la fonction' GetUTCTime'. –

Répondre

0

Le code de test suivant suggère que la variable temps (aTimeSpan) soit examinée.

Private Sub Button1_Click(ByVal sender As System.Object, _ 
          ByVal e As System.EventArgs) Handles Button1.Click 


    Dim ts As New TimeSpan(DateTime.Now.Ticks) 'create a test timespan 
    'Dim ts As New TimeSpan(0,0,0) 'create a test timespan 
    Dim oneHr As New TimeSpan(1, 0, 0) 'one hour increments 

    For x As Integer = 0 To 24 '25 calls to GetUTCTime 
     Debug.WriteLine("  '" & GetUTCTime(ts).ToString) 
     ts = ts.Add(oneHr) 'add one hour 
    Next 
End Sub 

Private Function GetUTCTime(ByVal aTimeSpan As TimeSpan) As TimeSpan 
    'i don't like to use variable names that are keywords 
    Dim dt As New DateTime(aTimeSpan.Ticks) 
    dt = dt.ToUniversalTime() 
    Dim dtUniversal As New TimeSpan(dt.Ticks) 
    Return dtUniversal 

End Function 

'debug output 
'733980.22:23:08.8112022 
'733980.23:23:08.8112022 
'733981.00:23:08.8112022 
'733981.01:23:08.8112022 
'733981.02:23:08.8112022 
'733981.03:23:08.8112022 
'733981.04:23:08.8112022 
'733981.05:23:08.8112022 
'733981.06:23:08.8112022 
'733981.07:23:08.8112022 
'733981.08:23:08.8112022 
'733981.09:23:08.8112022 
'733981.10:23:08.8112022 
'733981.11:23:08.8112022 
'733981.12:23:08.8112022 
'733981.13:23:08.8112022 
'733981.14:23:08.8112022 
'733981.15:23:08.8112022 
'733981.16:23:08.8112022 
'733981.17:23:08.8112022 
'733981.18:23:08.8112022 
'733981.19:23:08.8112022 
'733981.20:23:08.8112022 
'733981.21:23:08.8112022 
'733981.22:23:08.8112022 

Si vous êtes en train de changer de local à UTC et arrière:

'a test date in local time 
Dim d As DateTime = DateTime.Now 
'convert local to UTC 
Dim u As DateTime = d.ToUniversalTime 
'convert UTC to local 
Dim nd As DateTime = u.ToLocalTime 

Soit vous faites ce plus difficile que ce soit, ou je manque quelque chose

Dim d As DateTime = DateTime.Parse("10:00:00") 'this is local central daylight 
    Dim u As DateTime = d.ToUniversalTime 'this is universal 
    d = u.ToLocalTime 'double check 
+0

Lorsque j'ai changé de fonction, il sauvegarde toutes les valeurs correctement dans la base de données sans erreur. Mais tout en affichant à nouveau les valeurs locales, la conversion fonctionne correctement si l'heure sélectionnée est 18 heures UTC mais quand l'utilisateur sélectionne l'heure 19 heures, elle économise 00 heures UTC à la base de données mais ne convertit pas l'heure locale en--Pour convertir UTC local Dim dt As New DateTime (time.Ticks) \t \t dt = dt.ToUniversalTime() - local à UTC \t Dim dt As New DateTime (time.Ticks) \t \t dt = dt.ToUniversalTime ( \t \t 'Dim dtUniversal comme nouveau TimeSpan (dt.Ticks) \t \t Retour Nouveau TimeSpan (dt.Hour, 0, 0) – user228777

+0

La déclaration suivante me donne l'heure locale 3 heures qui m'aurait donné 2 heures (je suis dans le fuseau horaire de l'Est des États-Unis) TimeZone.CurrentTimeZone.ToLocalTime (DateTime.Parse ("07:00:00")) – user228777

+0

Tout ce que j'ai fait est exécuté ce TimeZone.CurrentTimeZone.ToLocalTime (DateTime.Parse ("07:00:00")) qui devrait avoir retourné 2 heures du matin (EST) au lieu de cela il est retourné 3 heures du matin. Je n'ai pas fait de dur. – user228777

Questions connexes