c# - Convert.ToString(DateTime) 产生英国格式而不是美国格式

标签 c# sql-server datetime localization regional-settings

我遇到一个问题,C# DateTime 字符串无法转换为 SQL DateTime,因为它神秘地被格式化为英国日期 (dd/MM/yyyy)。以下是该系列事件:

  1. 在美国的远程服务器上创建一个对象并将其序列化为 xml。
  2. XML 在 CA 的本地计算机上反序列化回对象。序列化日期如下所示:2011-07-13T09:56:57.0542425
  3. 应用程序尝试调用前面提到的存储过程将对象保存到数据库。它(不必要)将日期转换为字符串,然后使用 Convert.ToString(DateTime) 将其作为参数传递给存储过程。
  4. 存储过程失败,并出现 SqlException“将数据类型 nvarchar 转换为 datetime 时出错”,因为它收到的 DateTime 类型参数的字符串采用 dd/MM/yyyy 格式(数据库语言为美国英语)。

现在,代码不应该将日期时间转换为字符串,然后再转换回 SQL 中的日期时间,但在一切正常一年多后,这个问题才开始发生(在多台计算机上)。所以我认为数据库或操作系统的文化最近一定发生了变化,导致它们使用不同的日期格式。令我惊讶的是,将操作系统(Windows 7)从英语(加拿大)更改为英语(美国)并重新启动后,问题仍然出现。更令人困惑的是,当本地创建相同类型的对象而不是反序列化时,无论区域设置如何,都不会发生错误。唯一的区别是序列化版本发生在 Windows 服务中,而本地创建的对象版本发生在 Windows 应用程序中。它们都使用自己的调用 Convert.ToString(DateTime) 的程序集副本,但它们使用该程序集的相同版本。我完全困惑了。

附注.NET 2.0 和 SQL Server 2005

最佳答案

为什么不使用您特别想要的区域性来强制 DateTime.ToString() 的格式,或者指定与您的 SQL 函数期望相匹配的自定义格式规则?

对于自定义格式,您可以查看 here或者对于特定于文化的格式,您可以查看 here

关于c# - Convert.ToString(DateTime) 产生英国格式而不是美国格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6961092/

相关文章:

c# - 清理 asp.net (mvc3) 中的用户输入以使其安全

c# - 解析来自服务器的 UTF8 JSON 响应

c# - 如何将 DateTime 转换为东部时间

android.database.sqlite.SQLiteException : no such column : id (code 1) while compiling : s

sql-server - "deadlock victim"在事务中,如何更改优先级?

python - 用 python 解析 Facebook feed 日期时间?

c# Class Names - 关于如何命名类的约定

sql - 防止 SQL 数据库中的数据欺诈和删除

JavaScript 日期 UTC 日期时间-本地

python - 两个日期之间的日期数