2010-10-21 12 views
6

Tengo un problema con el almacenamiento del objeto DateTime en una tabla de datos, pierde la información de tipo establecida en ella. Por ejemplo, si DateTime.Kind es UTC, una vez que lo asigno al valor de datarow cambia el tipo a Unspecified . Encuentra el código a continuación.¿Cómo persistir el tipo de fecha y hora mientras se almacena un objeto de fecha y hora en una tabla de datos?

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

¿Puede decirme una solución para esto?

Gracias !!!

Respuesta

8

table.Columns.Add (new DataColumn ("Date1", typeof (DateTime)));

utilizar la propiedad DataColumn.DateTimeMode:

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

Esto no debería importar si almacena fechas en su dBase en UTC, como debe ser.

Cuestiones relacionadas