2016-12-08 67 views
0

我试图从数据库中提取数据,并使用C#无法DateTime值转换为UTC

我已经试过这一点,这是行不通的日期时间值转换为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

孤独Planeteer没有明确规定什么是“不工作”的意思。以下示例演示了如何通过使用Lonely Planeteer所需的语法松散地改变DateTime的种类。也许这个完整的工作例子将允许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