gpt4 book ai didi

.net - 日期时间格式与 SQL Server 中的格式不匹配

转载 作者:行者123 更新时间:2023-12-01 15:05:56 24 4
gpt4 key购买 nike

DateTime.UtcNow.ToString() 的格式是 - DD/MM/YYYY HH:MM:SS

SQL Server Express 期望的格式是 - YYYY/MM/DD HH:MM:SS

(SqlDateTime)DateTime.UtcNow 的格式是 - DD/MM/YYYY HH:MM:SS

据我所知,两者都是英国格式。我在英国,在同一台机器上运行代码和 SQL Server Express。

我知道我可以在 ToString() 方法中指定格式,但这并不能解决根本问题。为什么 SQL Server Express 在同一台机器上运行时需要不同的格式?

解决这种不匹配的最佳方法是什么,以便它在我发布到服务器(可能没有这个问题)时也能正常工作?

我是否应该在我的机器上同步日期格式并假设发布时一切正常?如果是这样,我该怎么做?或者我应该通过某种方式检测 SQL Server Express 的日期格式并使我的代码生成相同的格式来在代码中处理它吗?如果是这样,我该怎么做?

最佳答案

使用标准的、明确的、与语言和区域设置无关的格式。如果您必须使用字符串,请按以下格式传递(我知道您可以在 .NET 中使用 .ToString() 实现):

YYYY-MM-DDTHH:MM:SS

例如:

Console.WriteLine(DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss"));

之所以更可取,是因为无论您的代码在哪里运行、对底层操作系统进行了哪些更改或在 SQL Server 端进行了哪些更改,日期都将始终正确且不会被误解。使用上述格式,如果由于可能发生的各种原因( session 设置如 LANGUAGEDATEFORMAT、区域设置)而被误解,您将永远不必担心、语言环境,甚至您自己的代码也可以对传入的字符串格式做出假设)。 SQL Server 只有几种真正安全的格式,mm/dd/yyyydd/mm/yyyy 绝对不在其中。

现在,我不确定您为什么首先要使用字符串。最佳实践建议您应该从 C# 传递日期时间参数,而不是字符串文字。没有理由将其转换为字符串。很多人会让用户在文本框中手动输入日期,然后只传递他们输入的内容。不要这样做 - 强制他们从日历控件或一组下拉列表中进行选择,并从中构建一个日期时间值。如果您让用户输入日期,您永远无法确定一个人的 09/07/2013 实际上是另一个人的 07/09/2013

总而言之,如果您只想输入当前时间,那么让 SQL Server 提供该值的问题就小得多,因为它也有这种能力。因此,例如,如果您将此数据存储在要插入的新行的列中,请将列设置为:

ModifiedDate DATETIME NOT NULL DEFAULT GETUTCDATE()

现在您不必从 .NET 传递此参数,甚至不必在 INSERT 语句中提及列名。

关于.net - 日期时间格式与 SQL Server 中的格式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406453/

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