How to convert DateTime of type DateTimeKind.Unspecified to DateTime.Kind.Utc in C# (.NET)

后端 未结 3 1631
半阙折子戏
半阙折子戏 2021-01-07 16:18

I\'ve inherited C# code that has an awful lot of DateTimes where the Kind property is DateTimeKind.Unspecified. These are fed into Datetime.ToUniversalTime() which gives ba

相关标签:
3条回答
  • 2021-01-07 16:44

    Do you maybe need something like this:

    var unspecified = new DateTime(2016, 12, 12, 10, 10, 10, DateTimeKind.Unspecified);
    var specified = DateTime.SpecifyKind(unspecified, DateTimeKind.Utc);
    

    About SpecifyKind() method from MSDN:

    The SpecifyKind method creates a new DateTime object using the specified kind parameter and the original time value.

    It will create new object, new Kind and same time value. You cannot change Kind of existing object, you need to create new one with same values and different Kind.

    Regarding to other question here are supported types in SQL Compact. And here is issue regarding to DateTimeOffset. It looks like that it is not supported yet in Sql Compact.

    0 讨论(0)
  • 2021-01-07 16:50

    You could combine the two above answers for a cleaner solution...

    public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind)
    {        
        return DateTime.SpecifyKind(DT, DTKind);
    }
    
    0 讨论(0)
  • 2021-01-07 17:01

    I use an extension method:

    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;
    }
    

    This is much shorter to use in LINQ than having to type out DateTime.SpecifyKind(unspecified, DateTimeKind.Utc) every time.

    For example:

    table.Where((x) x.StartTimeStampUTC.SetKind(DateTimeKind.Utc).ToString("G") = GUIStartTimeStampTxt.Text)
    
    0 讨论(0)
提交回复
热议问题