如何将DateTimeKind.Unspecified类型的DateTime转换为C#(.NET)中的DateTime.Kind.Utc
我inheritance了C#代码,它有很多DateTimes,其中Kind属性是DateTimeKind.Unspecified。 它们被送入Datetime.ToUniversalTime(),它返回一个UTC日期时间(在我的情况下它增加了7个小时)。 这就是ToUniversalTime()的工作原理; 见MSDN。 问题是这些DateTime实际上已经是UTC时间。 它们被从SQL Server Compact 4.0数据库中取出。 它们以UTC格式存储在那里。 我的主要问题是:
- 如何修改DateTime的Kind属性,使其为UTC而非Unspecified? 我不想改变时间或日期。 因此,例如,2013年4月1日上午9:05,其Kind属性为“未指定”的日期应该成为2013年4月1日,UTC时间9:05的日期时间。
如果我可以沉迷于后续问题,那将是:
- 是否必须将值从Sql Server Compact返回为“未指定”? 在Sql Server Compact中,它们被存储为类型(datetime,而不是null)。 看一下代码,看起来它们只是放在数据库中,但没有规定将它们标记为UTC或任何东西。 处理事情有更好的方法吗? 是否有一种灵活的方法来确保Date Compacts以SQL Compact作为UTC?
如果我能提供更多详细信息,请通知我。 我是这个代码库的新手,仍然让我的大脑围绕它,所以我很难完美地描述这个问题。
戴夫
你可能需要这样的东西:
var unspecified = new DateTime(2016, 12, 12, 10, 10, 10, DateTimeKind.Unspecified); var specified = DateTime.SpecifyKind(unspecified, DateTimeKind.Utc);
关于MSDN中的 SpecifyKind()
方法:
SpecifyKind方法使用指定的种类参数和原始时间值创建新的DateTime对象。
它将创建新对象,新的Kind和同一时间值。 您无法更改现有对象的种类,您需要创建具有相同值和不同种类的新对象。
关于其他问题,这里是SQL Compact中支持的类型。 这是关于DateTimeOffset的问题。 看起来它在Sql Compact中尚不支持。
我使用扩展方法:
public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind) { var NewDT = New DateTime(DT.Year, DT.Month, DT.Day, DT.Hour, DT.Minute, DT.Second, DT.Millisecond, DTKind); Return NewDT; }
在LINQ中使用它比在每次输入DateTime.SpecifyKind(unspecified, DateTimeKind.Utc)
要短得多。
例如:
table.Where((x) x.StartTimeStampUTC.SetKind(DateTimeKind.Utc).ToString("G") = GUIStartTimeStampTxt.Text)
您可以将上述两个答案结合起来,以获得更清晰的解
上述就是C#学习教程:如何将DateTimeKind.Unspecified类型的DateTime转换为C#(.NET)中的DateTime.Kind.Utc分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind) { return DateTime.SpecifyKind(DT, DTKind); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013001.html