首页 > 解决方案 > 为什么日期时间字符串在一个 Windows 10 系统上填充为 0,而在大多数其他系统上却没有?

问题描述

几台机器上的以下代码将 SQL Server 日期时间字符串从“NOW”设置为同一日期,但在午夜。

DateTime deleteDateThreshold = DateTime.Now;
string deleteDateThresholdS = DateTime.Now.ToString();
deleteDateThresholdS = deleteDateThresholdS.Substring(0, 10) + " " + "00:00:00 AM";

想想看,我本可以减到午夜,但我认为这是一种更快的方法。

然后将字符串解析为 DateTime;并从中减去一天。一对一系统,解析失败,因为子字符串遇到了一个额外的字符,值为 2,因为日期字符串不是零填充的 (03/04/2020)。我终于能够捕捉到有问题的日期时间;而且它不是日期时间,所以应该发生异常。

这是解析的代码。

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 填充?

标签: c#sql-serverdatetimeparsing

解决方案


想想看,我本可以减到午夜,但我认为这是一种更快的方法。

我想说<somedate>.Date或者DateTime.Today(谢谢,@ckuri)可能是在某个日期/今天到达(本地)午夜的最简单方法。(也许考虑在所有系统中使用 UtcNow)

您的问题的真正性质是什么,我目前不确定,但我几乎可以肯定,如果您将日期保留为日期并且没有转换成字符串来操纵它们,那么它就不会发生;SQL Server 具有映射到 CLR 数据类型的日期数据类型 - 根本不需要在此系统中将日期作为字符串存储、处理、传输或操作


推荐阅读