【发布时间】:2013-07-12 13:26:20
【问题描述】:
正如标题所说,在我为 DateTime 对象分配时区 UTC 后,它在分配给 DataRow 时会丢失其 TimeZone 信息。
static void Main(string[] args)
{
DateTime universalTime = DateTime.UtcNow;
DataTable table = new DataTable();
table.Columns.Add("Time", typeof(DateTime));
DataRow row = table.NewRow();
row["Time"] = universalTime;
/* writes Kind: Utc */
Console.WriteLine("Universal time : " + universalTime + ", kind: " + universalTime.Kind);
/* writes Kind: Unspecified */
Console.WriteLine("Same time in DataRow: " + row["Time"] + ", kind: " + ((DateTime)row["Time"]).Kind);
Console.ReadKey();
}
分配给 DataRow 后,它显示 Kind = Unspecified。
这是 DataRow 中的错误还是我在这里做错了什么?
【问题讨论】:
-
这有关系吗?对于在数据库中存储时间,存储为 UTC 是唯一有意义的格式。
-
dup 帖子有答案,但也要注意
Kind并没有真正保留时区信息。这只是一条规则,说明在与时区函数交互时应如何处理该值。无论如何,在保存数据时它通常不会持久化。您可以将UTC视为一个时区,但Local或Unspecified的种类有点不同。如果你追求的是持久性,你可能想看看DateTimeOffset。即使您的偏移量为零,它至少会以这种方式持久化并且不会丢失。