我继承了一段C#代码,其中包含大量的DateTime,Kind属性为DateTimeKind.Unspecified。这些DateTime被输入到Datetime.ToUniversalTime()中,后者返回一个UTC日期时间(在我的例子中,它增加了7个小时)。问题是这些日期时间实际上已经是UTC时间了。它们是从SQL Server Compact 4.0数据库中提取出来的。它们是以UTC时间存储在那里的。我的主要问题是:
1.如何修改DateTime的Kind属性,使其为UTC而不是Unspecified?我不想更改时间或日期。因此,例如,Kind属性为“Unspecified”的日期April 1st 2013,9:05 am应变为日期时间April 1st 2013,9:05 UTC。
如果我能提出一个后续问题,那就是:
1.值是否必须从SQL Server Compact返回为“Unspecified”?在SQL Server Compact中,它们存储为类型(datetime,而不是null)。查看代码,似乎只是将它们放入数据库中,但没有规定将它们标记为UTC或任何内容。是否有更好的方法来处理这些问题?是否有更灵活的方法来确保DateTimes从SQL Compact中输出为UTC?
如果我能提供更多的细节,请告诉我。我是这个代码库的新手,还在学习它,所以我很难完美地描述这个问题。
戴夫
4条答案
按热度按时间2hh7jdfx1#
你也许需要这样的东西:
关于MSDN中的
SpecifyKind()
方法:SpecifyKind方法使用指定的种类参数和原始时间值创建新的DateTime对象。
它将创建新对象、新种类和相同的时间值。您不能更改现有对象的种类,您需要创建具有相同值和不同种类的新对象。
关于其他问题,这里是SQL Compact中支持的类型。这里是关于DateTimeOffset的问题。看起来它在Sql Compact中还不受支持。
lrpiutwd2#
您可以将上述两个答案结合起来,以获得更清洁的解决方案...
qgelzfjb3#
我使用扩展方法:
在LINQ中使用这比每次都必须输入
DateTime.SpecifyKind(unspecified, DateTimeKind.Utc)
要短得多。例如:
6jygbczu4#