繁体   English   中英

无法将DateTime从SQL Server转换为C#DateTime

[英]Unable to convert DateTime from SQL Server to C# DateTime

我在C#编写了一个使用日期的程序。 它从SQL Server表中获取值。 我使用的是Windows 7,程序运行正常。 我有这行代码:

DateTime fechaOperacion = Convert.ToDateTime(reader["FechaOperacion"]);

读者以24小时格式返回日期,我能够将其转换为DateTime变量。

现在我对Windows 10进行了系统升级,同样的代码行引发了以下错误:

字符串未被识别为有效的DateTime。 从索引20开始有一个未知单词。

现在读者返回am / pm格式,而索引20则是am或pm

我试过以下的事情:

  • 将代码行改为:

    1. Convert.ToDateTime(reader["FechaOperacion"], System.Globalization.CultureInfo.InvariantCulture)
    2. reader.GetDateTime(reader.GetOrdinal("FechaOperacion"));
  • 将文化转换为24小时格式

     System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(1033); 

但这些似乎都不起作用,我不知道还能做些什么。

最终,这里的根本问题是存储一个表示日期/时间的值作为文本数据(意思是某种[n][var]char({max|n}) ,或者在push: [n]text ) 。 这有很多问题:

  • 它需要更多的空间
  • 它无法正确/有效地排序
  • 它无法正确/有效地编入索引
  • 它无法正确/有效地过滤
  • 它导致解析客户端和服务器之间的错误
  • 它有各种各样的本地化和国际化问题

你应该有一个datetime / date / time /等列。 然后将其存储为需要零解析的数字 (不是字符串),并且可以可靠地工作而不会出现任何转换问题。


注意: 可能是您正确存储它,但在查询的select语句中格式化它。 在这种情况下,就是不要这样做 ; 返回日期时间raw,让接收客户端担心如何显示它。

根据您的实际格式,您可以定义合适的格式列表并执行如下所述的转换

string[] mfs = { "MM/dd/yyyy HH:mm:ss",  "MM/dd/yyyy h:mm:ss tt"};

var dat = DateTime.ParseExact("04/23/1945 8:45:22 PM", mfs, 
                System.Globalization.CultureInfo.InvariantCulture, 
                System.Globalization.DateTimeStyles.None);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM