从SQL阅读器获取正确的日期时间格式

时间:2017-01-04 14:20:06

标签: c# sql datetime datetime-format datetimeoffset

问题:我使用datetime类型的列获取了SQL数据库,并且我正在尝试将值传递给类型为DateTime的c#API变量。

datetime format in SQL DB:  2011-11-14 00:00:00.000  // So that equals:
                            yyyy - MM - dd HH:mm:ss.ttt

以下是我尝试获得正确价值的一些尝试:

MyClass.MyProperty= Convert.ToDateTime(reader.GetSqlDateTime(0));
MyClass.MyProperty= Convert.ToDateTime(reader.GetDateTime(0));
MyClass.MyProperty= Convert.ToDateTime(reader.GetValue(0));
MyClass.MyProperty= DateTime.ParseExact(reader.GetValue(0).ToString(), "yyyy - MM - dd HH:mm:ss.ttt", CultureInfo.InvariantCulture);

每当我的尝试编译没有错误时,我得到以下输出:

0001-01-01T00:00:00

我还尝试与DateTimeOffset结合并从字符串中获取DB的值,然后将其转换为Datetime,但VS

更新

我尝试通过服务器在数据库上执行我的SQL语句,发现我的个人资料的UserGuid在所选列中没有任何时间。 (当我最初测试SQL语句时,我使用了不同的用户凭据)我修复了一些事情并调试了一些,现在连接和阅读器工作正常。我仍然有格式化的问题。

DB value: 2014-08-07 00:00:00.000
Output: 8/7/2014 12:00:00 AM

我试着告诉它如何使用ParseExact格式化DateTime格式,但它会抛出此异常:

System.FormatException' in mscorlib.dll

Additional information: String was not recognized as a valid DateTime.

以下是我的整个读者代码:

        while (reader1.Read())
        {
            newUsagePlan.PlanValidityFrom = DateTime.ParseExact(Convert.ToString(reader1.GetValue(0)), "yyyy - MM - dd HH:mm:ss.ttt", CultureInfo.InvariantCulture);
            string lol1 = reader1.GetValue(0).ToString(); // Output: "8/7/2014 12:00:00 AM"
            string lol2 = reader1.GetSqlDateTime(0).ToString(); // Output: "8/7/2014 12:00:00 AM"
        }

最终结论:

我现在很容易解决这个问题,只需使用它:

string sqlFormattedDate = reader1.GetDateTime(0).ToString("yyyy-MM-dd HH:mm:ss.fff");

获得所需的输出:2014-08-07 00:00:00.000

一条建议:尽量不要在单个项目中处理生产和开发数据库,​​当数据库数据存在不一致并且您不了解它时,它可能会让您大吃一惊。干杯:)

0 个答案:

没有答案