2016-12-08 68 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