Как сохранить тип DateTime при сохранении объекта datetime в таблице данных? - PullRequest
7 голосов
/ 21 октября 2010

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

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

Подскажите, пожалуйста, как это обойти?

Спасибо !!!

1 Ответ

11 голосов
/ 21 октября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...