2010-10-21 10 views
6

Sto affrontando un problema con la memorizzazione dell'oggetto DateTime in un datatable, esso perde il set di informazioni Kind in esso. Ad esempio se DateTime.Kind è UTC, una volta assegnato al valore datarow cambia il Tipo a Non specificato Si prega di trovare il codice qui sotto.Come mantenere DateTime Kind durante la memorizzazione di un oggetto datetime in una tabella di dati?

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

Per favore, puoi dirmi una soluzione per questo?

Grazie !!!

risposta

8

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

utilizzare la proprietà DataColumn.DateTimeMode:

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

Questo non dovrebbe importa se si memorizza date nel vostro dbase in UTC, come si dovrebbe.

Problemi correlati