簡體   English   中英

從C#中的T-Sql數據庫讀取以UTC保存的DateTime

[英]Reading DateTime saved in UTC from T-Sql database in C#

我將t-sql db中的日期時間保存為UTC而不是本地時間,即保存后,它將失去UTC日期: 2011-11-08 00:00:00.000 在C#中從db讀取時,它被讀取為本地時間而不是UTC。 例如:在讀取dateTime值之后, dateTime.ToUniversalTime()給出了不同的值。

如何將db datetime值讀取為UTC而不是本地時間? 或者我應該在當地時間保存在t-sql中?

好吧,如果你得到一個DateTimeKindUnspecified ,你可以使用:

DateTime utc = DateTime.SpecifyKind(unspecified, DateTimeKind.Utc);

這類問題只是我不喜歡DateTime原因之一

Jon Skeet的解決方案對我不起作用。 由於某種原因, DateTime.SpecifyKind(date, DateTimeKind.Utc)返回Unspecified種類的DateTime對象。

然而,以下工作:

var date = DateTime.Parse("2017-03-07 00:15:2.663"); // Assuming UTC, Kind=Unspecified
date = TimeZoneInfo.ConvertTimeToUtc(date, TimeZoneInfo.Utc); // Assuming UTC, Kind=Utc
var output = Newtonsoft.Json.JsonConvert.SerializeObject(date); // "2017-03-07T00:15:02.663Z"

屬性Kind可以是:本地,UTC,未指定。 如果只是初始化一個新的DateTime對象,則Kind的默認設置為Local。

// read exact same time from DB, but leave the 'Kind' to be Unspecified
// PS Kind is not local, not utc here
(DateTime)(reader["dbdate"]) 

// read exact same time from DB, but set 'Kind' to be UTC
// if your date in your DB is also utc time, then use this one
DateTime.SpecifyKind((DateTime)(reader["dbdate"]), DateTimeKind.Utc) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM