多台机器上的以下代码将 SQL Server 日期时间字符串从“NOW”设置为同一日期但在午夜。
DateTime deleteDateThreshold = DateTime.Now;
string deleteDateThresholdS = DateTime.Now.ToString();
deleteDateThresholdS = deleteDateThresholdS.Substring(0, 10) + " " + "00:00:00 AM";
想想看,我本可以减去回到午夜,但我认为这是一种更快的方法。
然后字符串被解析为 DateTime;并从中减去一天。一一系统,解析失败,因为 Substring 遇到一个额外的字符,值为 2,因为日期字符串没有填充零(03/04/2020)。我终于能够捕捉到有问题的日期时间;并且它不是 DateTime,因此应该发生异常。
这是解析的代码。
deleteDateThreshold = DateTime.Parse(deleteDateThresholdS, us);
deleteDateThreshold = deleteDateThreshold.AddDays(-1);
在大多数系统上,日期字符串看起来像这样
"03/04/2020 00:00:00 AM"
但是,在抛出异常的系统上,日期不是 0 填充的,字符串如下所示:
"3/4/2020 2 00:00:00"
为什么这个字符串中有一个 2,为什么月和日不是 0 填充的?
想想看,我本可以减去回到午夜,但我认为这是一种更快的方法。
我会说<somedate>.Date
或者DateTime.Today
(谢谢,@ckuri)可能是在某个日期/今天到达(本地)午夜的最简单方法。(也许可以考虑在您的所有系统中使用 UtcNow)
您的问题的真正性质是什么,我现在不确定,但我几乎可以肯定,如果您将日期保留为日期并且不转换字符串和转换字符串来操作它们,则不会发生这种情况;SQL Server 具有日期数据类型,映射到 CLR 数据类型 - 根本不需要在此系统中将日期作为字符串存储、处理、传输或操作
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句