[英]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中?
好吧,如果你得到一個DateTime
與Kind
的Unspecified
,你可以使用:
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.