2016-12-08 4 views
0

Я пытаюсь получить данные из базы данных и преобразовывать значения даты и времени в формате UTC с использованием C#Невозможно преобразовать значение DateTime в формате UTC

Я попытался это, который не работает.

foreach (GrJscMstr gjm in grJscMstrs) 
       { 
        gjm.gr_sch_date = DateTime.SpecifyKind(gjm.gr_sch_date, DateTimeKind.Utc); 
       } 

Затем я попробовал это, также не работает:

foreach (GrJscMstr gjm in grJscMstrs) 
       { 
        gjm.gr_sch_date = new DateTime(gjm.gr_sch_date.Year, gjm.gr_sch_date.Month, gjm.gr_sch_date.Day, 0, 0, 0, DateTimeKind.Utc); 
       } 

Затем я изменил свой код к этому, который работает отлично.

foreach (GrJscMstr gjm in grJscMstrs) 
       { 
        gjm.gr_sch_date = new DateTime(gjm.gr_sch_date.Year, gjm.gr_sch_date.Month, gjm.gr_sch_date.Day, 0, 0, **1**, DateTimeKind.Utc); 
       } 

Мне нужно знать, почему. Для меня это не имеет никакого смысла. DateTime.SpecifyKind(gjm.gr_sch_date, DateTimeKind.Utc); должен работать нормально.

+0

Какой тип gr_sch_date? – CodingYoshi

+0

Является ли 'gjm.gr_sch_date' значением' DateTime' в локальном часовом поясе? Если это так, попробуйте использовать 'TimeZoneInfo.ConvertTimeToUtc (DateTime.SpecifyKind (gjm.gr_sch_date.Date, DateTimeKind.Local))'. Если это неопределенная дата, вместо этого используйте 'DateTimeKind.Unspecified'. Если вы просто переконфигурируете часовой пояс в UTC, AFAIK, 'DateTime.SpecifyKind (gjm.gr_sch_date, DateTimeKind.Utc)' преобразуется в UTC, не используя разницу в часовом поясе. –

+0

Это ужасно названные переменные и классы. – Kinetic

ответ

0

Lonely Planeteer не указывает, что означает «не работает». Следующий пример демонстрирует, как можно изменить тип DateTime, свободно говоря, используя синтаксис, желаемый Lonely Planeteer. Возможно, этот полный рабочий пример позволит Lonely Planeteer найти проблему.

using System; 

namespace StOv3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DateTime unspecifiedTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Unspecified); 
      DateTime localTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Local); 
      DateTime utcTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Utc); 
      Console.WriteLine("A DateTime, unspecified whether UTC or local {0}, Kind {1}", unspecifiedTime, unspecifiedTime.Kind); 
      Console.WriteLine("A local DateTime {0}, Kind {1}", localTime, localTime.Kind); 
      Console.WriteLine("A UTC DateTime {0}, Kind {1}", utcTime, utcTime.Kind); 
      // Attempt to redefine variables with same values; 

      unspecifiedTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Unspecified); 
      localTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Local); 
      utcTime = new DateTime(2016, 12, 8, 0, 0, 0, DateTimeKind.Utc); 
      Console.WriteLine("A DateTime, unspecified whether UTC or local {0}, Kind {1}", unspecifiedTime, unspecifiedTime.Kind); 
      Console.WriteLine("A local DateTime {0}, Kind {1}", localTime, localTime.Kind); 
      Console.WriteLine("A UTC DateTime {0}, Kind {1}", utcTime, utcTime.Kind); 

      // Attempt to change kind of variable 

      unspecifiedTime = DateTime.SpecifyKind(unspecifiedTime, DateTimeKind.Utc); 
      localTime = DateTime.SpecifyKind(localTime, DateTimeKind.Unspecified); 
      utcTime = DateTime.SpecifyKind(utcTime, DateTimeKind.Utc); 
      Console.WriteLine("A DateTime, originally unspecified whether UTC or local {0}, Kind {1}", 
       unspecifiedTime, unspecifiedTime.Kind); 
      Console.WriteLine("A DateTime, originally local {0}, Kind {1}", localTime, localTime.Kind); 
      Console.WriteLine("A DateTime, originally UTC {0}, Kind {1}", utcTime, utcTime.Kind); 

     } 
    } 
} 

Консольный вывод:

 
A DateTime, unspecified whether UTC or local 12/8/2016 00:00:00, Kind Unspecified 
A local DateTime 12/8/2016 00:00:00, Kind Local 
A UTC DateTime 12/8/2016 00:00:00, Kind Utc 
A DateTime, unspecified whether UTC or local 12/8/2016 00:00:00, Kind Unspecified 
A local DateTime 12/8/2016 00:00:00, Kind Local 
A UTC DateTime 12/8/2016 00:00:00, Kind Utc 
A DateTime, originally unspecified whether UTC or local 12/8/2016 00:00:00, Kind Utc 
A DateTime, originally local 12/8/2016 00:00:00, Kind Unspecified 
A DateTime, originally UTC 12/8/2016 00:00:00, Kind Utc 
Смежные вопросы