【发布时间】:2017-02-07 21:26:46
【问题描述】:
我用 C# 编写了一个使用日期的程序。它从 SQL Server 表中获取值。我使用的是 Windows 7,程序运行良好。我有这行代码:
DateTime fechaOperacion = Convert.ToDateTime(reader["FechaOperacion"]);
阅读器返回 24 小时格式的日期,我能够将其转换为 DateTime 变量。
现在我将系统升级到 Windows 10,同一行代码抛出以下错误:
字符串未被识别为有效的日期时间。从索引 20 开始有一个未知单词。
现在读者返回 a.m. / p.m.格式,并且在索引 20 处有 a.m 或 p.m.
我尝试了以下方法:
-
将代码行改写为:
Convert.ToDateTime(reader["FechaOperacion"], System.Globalization.CultureInfo.InvariantCulture)-
reader.GetDateTime(reader.GetOrdinal("FechaOperacion"));
-
将区域性转换为 24 小时格式
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(1033);
但似乎这些都不起作用,我不知道还能做什么。
【问题讨论】:
-
定义“它似乎不起作用”。特别是
reader.GetDateTime(reader.GetOrdinal("FechaOperacion"))的结果是什么,这是独立于任何格式读取DATETIME列的正确方法? -
reader["FechaOperacion"]返回的究竟是什么?它提到String的事实意味着它不是“sql DateTime” - SQLdatetime值很好,不需要解析。那么:它是什么? -
如果
FechaOperacion是 DATETIME 列,那么听起来像是显示问题。如果您执行var dateStr = fechaOperacion.ToString("dd/MM/yyyy HH:mm:ss");会发生什么?dateStr的值是多少? -
您不必将 SQL
datetime转换为 C# DateTime。它们是等价的。如果您认为需要转换任何内容,那是因为您使用的是字符串而不是datetime。而不是使用Convert,您应该能够使用直接转换,即(DateTime)。如果不能,则返回字符串 -
从我在您的问题中读到的内容,我了解到您将日期存储在数据库中的 nvarchar/varchar 中,这不是一个好主意。如果您使用的是日期时间,则无需转换。
标签: c# sql-server datetime