2010-10-21 27 views
6

Tôi đang gặp vấn đề với việc lưu trữ đối tượng DateTime vào một datatable, nó sẽ xóa thông tin Kind thành nó. Ví dụ nếu DateTime.Kind là UTC, một khi tôi gán nó vào giá trị datarow, nó sẽ thay đổi Kind thành Unspecified Vui lòng tìm mã bên dưới.Làm thế nào để tồn tại DateTime Kind trong khi lưu trữ một đối tượng datetime vào một bảng dữ liệu?

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

Bạn có thể cho tôi biết cách giải quyết cho vấn đề này không?

Xin cảm ơn !!!

Trả lời

8

bảng.Columns.Add (new DataColumn ("Date1", typeof (DateTime)));

Sử dụng các tài sản DataColumn.DateTimeMode:

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

này không nên quan trọng nếu bạn lưu trữ ngày tháng trong dbase của bạn trong UTC, như bạn cần.

Các vấn đề liên quan