2016-03-13 39 views
1

我想在UTC Azure SQL中的列中存儲UTC時間,以便我可以本地化我的移動應用程序的用戶的日期時間,而不管他們的時區。我在本地桌面上使用SQL Server 2014來開發我打算遷移到Azure SQL的數據庫。如何在Azure SQL中記錄UTC時間?

現在我嘗試使用類型DATETIMEOFFSET(7)我的專欄,但是當我插入日期,我看到這樣的價值觀在管理工作室(用我自己的本地偏差值)

2016-03 -13 18:00:00.0000000 -04:00

這是一個有點混亂,因爲應該沒有偏移,UTC始終是參考點-00:00這是一個UTC值或沒有?或者是SQL Management Studio將它們轉換爲顯示到我的本地時區?

此外,我的C#代碼提供的值作爲UTC或作爲偏移值?

使用的參數傳遞到我的存儲過程我的C#代碼如下所示

    string dtFormat = "yyMMdd HHmm"; 

        DateTimeOffset dtOut; 
        bool result = DateTimeOffset.TryParseExact(CurrentUTC.date + " " + CurrentUTC.time, dtFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dtOut); 

        command.Parameters.Add("@datetime", SqlDbType.DateTimeOffset).Value = dtOut; 
+0

不,DateTimeOffset不是UTC,而是它相對於它。當您想要及時錄製時,它通常是最好的數據類型。 – Crowcoder

+0

@Crowcoder也許我可以將它存儲爲一個字符串,我知道它將始終是UTC,然後將它解析爲客戶端應用程序上的本地時間? – erotavlas

+1

[給這個閱讀](http://blog.nodatime.org/2011/08/what-wrong-with-datetime-anyway.html)。日期和時間很難。但我不認爲你需要使用字符串。 – Crowcoder

回答

1

對於我的Azure的應用程序,我只是用在Azure的SQL,然後在C#中使用DateTime.UtcNow的時間字段該字段的值。

當讀取它時,我使用TimeZoneInfo.ConvertTimeFromUtc()和本地用戶的時區字符串。