字符串日期比较

Posted

技术标签:

【中文标题】字符串日期比较【英文标题】:String Date Compare 【发布时间】:2012-10-19 22:32:15 【问题描述】:

在 BDD 测试中,我正在比较日期。当比较日期在字符串中时。即使认为两个日期相同,我也收到此消息并且测试失败

应为“01/20/2012 12:00:00 AM”的对象,但发现“1/20/2012 12:00:00 AM”。

还有一件事是这发生在我的系统上。如果我让另一个开发人员运行测试,测试就会通过。是否有我遗漏的某种类型的设置?

其中的代码部分是

            customer["DateOfBirth"].Should().Be(Helper.DateOfBirth.ToString());

customer 是一个哈希表。这个特定的语句在其他机器上通过 OK,但不是我的。

我知道我可以通过更改为日期比较而不是字符串比较来修复它。但我很好奇,因为这在其他机器上很好。

【问题讨论】:

我想问题出在你的代码上。我不得不想象,因为你实际上并没有向我们展示任何东西。 如果问题出在代码上,它应该不能在另一台机器上正常运行,对吗? 如果您将日期作为字符串进行比较,那么您作为字符串列出的日期是不一样的。您应该转换为 DateTimes 然后进行比较。 @katie77:不,这不是一个有效的假设。您的代码可能是特定于文化的 - 因此默认情况下可以在使用一种文化的计算机上运行,​​但不能在其他计算机上运行。 【参考方案1】:

在 BDD 测试中,我正在比较日期。当比较日期是字符串时。

那听起来像你的问题。我的猜测是,您正在将默认文化中格式化的日期与其他文化中手动格式化的日期进行比较。

解决方案是与DateTime 值进行比较,而不是依赖格式化的值。允许测试运行器格式化两个值(如果它们不同)。

【讨论】:

【参考方案2】:

日期的格式不同——一个以 0 开头。

您应该将它们的格式设置为相同,或者直接比较实际的DateTime 值。

【讨论】:

@katie77 可以,这取决于日期如何转换为字符串。比较日期的最佳方法是使用 DateTime 类型。

以上是关于字符串日期比较的主要内容,如果未能解决你的问题,请参考以下文章

如何用java代码比较两个日期

js字符串日期直接比较大小

java怎么比较两个日期(年和月)的大小

CDateTimeCtrl类型的日期如何比较大小

java中怎么比较两个日期的大小

sql日期比较大小