2010-10-21 3 views
6

У меня возникла проблема с хранением объекта DateTime в datatable, он теряет информацию о типе, установленную в нем. Например, если DateTime.Kind является UTC, как только я присваиваю его значению datarow, он меняет вид на Unspecified Пожалуйста, найдите код ниже.Как сохранить DateTime Kind при сохранении объекта datetime в таблице данных?

public class LocalTimeToUtcConverter 
    { 
     public DateTime Convert(DateTime localDate) 
     { 
      var utcOffset = TimeZoneInfo.Local.GetUtcOffset(localDate); 

      var utc = localDate.ToUniversalTime(); 

      return utc + utcOffset; 
     } 
    } 

[Test] 
     public void Should_set_datetime_column_kind_to_utc() 
     {    
      var localDate = new DateTime(2010, 11, 01, 00, 00, 00); 
      Assert.That(localDate.Kind == DateTimeKind.Unspecified); 
      var converter = new LocalTimeToUtcConverter(); 
      DateTime date = converter.Convert(localDate); 
      Assert.That(localDate.Kind == DateTimeKind.Utc); 
      var data = CreateTable(date); 
      //Failes-Why???? 
      Assert.That(((DateTime)data.Rows[0].ItemArray[0]).Kind == DateTimeKind.Utc); 
     } 

     private DataTable CreateTable(DateTime date) 
     {    
      DataTable table = new DataTable();    
      table.Columns.Add(new DataColumn("Date1", typeof(DateTime))); 

      for (int i = 0; i < 10; i++) 
      { 
       var newRow = table.NewRow(); 
       newRow[0] = date; 
       table.Rows.Add(newRow); 
      } 

      return table; 
     } 

Прошу вас сказать мне обходной путь для этого?

Спасибо !!!

ответ

8

table.Columns.Add (новый DataColumn ("Date1", typeof (DateTime)));

Используйте свойство DataColumn.DateTimeMode:

var col = new DataColumn("Date1", typeof(DateTime)); 
col.DateTimeMode = DataSetDateTime.Utc; 
table.Columns.Add(col); 

Это не имеет значения, если вы храните даты в вашем DBase в UTC, как вы должны.

Смежные вопросы