c# - 如何在将 datetime 对象存储到数据表中时保留 DateTime Kind?

标签 c# datetime datatable

我在将 DateTime 对象存储到数据表时遇到问题,它丢失了其中设置的种类信息。例如,如果 DateTime.Kind 是 UTC,一旦我将它分配给数据行值,它就会将种类更改为未指定。请在下面找到代码。

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

你能告诉我一个解决方法吗?

谢谢!!!

最佳答案

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 格式将日期存储在数据库中,这应该无关紧要。

关于c# - 如何在将 datetime 对象存储到数据表中时保留 DateTime Kind?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990809/

相关文章:

sqlite - 使用 SQLite 进行透视查询

c# - WPF DataGrid,从 View 中获取数据表

c# - ImportRow() 不将 DataRows 复制到 C# 中的 DataTable

c# - 根据文件C#的位置获取目录

c# - 针对恶意攻击的防御性编程

asp.net-mvc-3 - 如何为 MVC3 中包含日期属性的 View 模型强制实现正确的全局化行为

c# - 如何在 C# 中获得我本地时间的 UTC 等效值

c# - 使用数组 c# 中的值过滤数据表

c# - 根据 JSON Schema C# 验证 JSON

c# - 调用 NamedPipeServerStream.SetAccessControl 时为 "Attempted to perform an unauthorized operation"