2010-07-28 178 views
0

我有以下函數來獲取utc時間。 dtuniversal我傳遞給sql server數據類型時間的stroed過程。它工作得很好,值東部時間晚上6點(這是23 utc)它晚上7點東部(這是24 utc)失敗我得到錯誤「此元數據的值無效」。將當地時間轉換爲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

這不是一個記錄錯誤消息。複製並粘貼*完全*,如顯示。 – 2010-07-28 18:54:45

+0

這是我得到的消息。我無法在這裏粘貼圖片。 System.ArgumentException {「此元數據的值無效。」} – user228777 2010-07-28 19:15:46

+0

我們需要一個簡短但完整的示例來重現問題。您需要將作爲參數傳遞的值包含到'GetUTCTime'函數的'time'參數中。 – 2010-07-28 20:16:36

回答

0

以下測試代碼建議應該查看可變時間(aTimeSpan)。

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 

如果你只是從本地更改爲UTC和回:

'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 

無論你在做這個難度比它的,或者我失去了一些東西

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

當我按照以下方式更改函數時,它會將所有值正確保存到數據庫中,而不會出錯。但如果再次顯示本地值轉換工作正常,如果時間選擇6PM是23 UTC,但當用戶選擇時間下午7點它節省了00小時UTC到數據庫,但將UTC轉換爲本地不工作小時開始00 - 要轉換UTC到本地 昏暗dt的作爲新的DateTime(time.Ticks) \t \t DT = dt.ToUniversalTime() - 本地對於UTC \t昏暗dt的作爲新的DateTime(time.Ticks) \t \t DT = dt.ToUniversalTime( ) \t \t'Dim DTUniversal As New TimeSpan(dt.Ticks) \t \t返回新TimeSpan(dt.Hour,0,0) – user228777 2010-07-29 12:16:10

+0

以下聲明給我當地時間凌晨3點我應該給我上午2點(我在美國東部時區) TimeZone.CurrentTimeZone.ToLocalTime(DateTime.Parse(「07:00:00」)) – user228777 2010-07-29 13:32:42

+0

我所做的運行此TimeZone.CurrentTimeZone.ToLocalTime(DateTime。解析(「07:00:00」))應該返回2 AM(EST),而不是返回3 AM。我沒有做任何努力。 – user228777 2010-07-29 17:25:24