[英]How to convert DateTime of type DateTimeKind.Unspecified to DateTime.Kind.Utc in C# (.NET)
我继承了C#代码,它有很多DateTimes,其中Kind属性是DateTimeKind.Unspecified。 它们被送入Datetime.ToUniversalTime(),它返回一个UTC日期时间(在我的情况下它增加了7个小时)。 这就是ToUniversalTime()的工作原理; 见MSDN。 问题是这些DateTime实际上已经是UTC时间。 它们被从SQL Server Compact 4.0数据库中取出。 它们以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)
您可以将上述两个答案结合起来,以获得更清晰的解
public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind)
{
return DateTime.SpecifyKind(DT, DTKind);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.