gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:13:12 24 4
gpt4 key购买 nike

我遇到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com