C#应用程序中日期的比较

时间:2013-10-08 14:09:55

标签: c# .net date datetime compare

我有一个asp.net应用程序,其中我有这三个日期:

now = 08-10-13 15:56:19

cloture1 = 01-10-13 00:00:00

cloture2 = 01-01-50 00:00:00

日期格式为DD-MM-YY HH:MM:SS。问题是函数DateTime.Compare()给了我相同的结果,即

DateTime.Compare(now,cloture1) > 0DateTime.Compare(now,cloture2) > 0

那么这个问题的原因是什么?我该如何解决我的片段?

3 个答案:

答案 0 :(得分:6)

问题是你的程序很可能将cloture2解释为1950年,而不是2050年。 因为您没有发布设置cloture2的代码,所以我无法提供具体的解决方案,但我能提供的最好的是您在代码中明确使用01-10-2050。

答案 1 :(得分:1)

如果now晚于cloture1,则返回的值将为1(或大于零)。

您提供的代码以及示例日期似乎在参考DateTime.Compare方法的MSDN文章时工作正常。

请查看以下链接,了解有关DateTime.Compare方法的更多信息:

http://msdn.microsoft.com/en-us/library/system.datetime.compare.aspx

如果您认为自己的代码仍然不正确,请详细说明您的问题。

答案 2 :(得分:1)

来自The "yy" Custom Format Specifier

  

在解析操作中,使用“yy”解析的两位数年份   自定义格式说明符基于   格式提供程序当前的Calendar.TwoDigitYearMax属性   日历。

     

在解析操作中,使用“yy”解析的两位数年份   自定义格式说明符基于   格式提供程序当前的Calendar.TwoDigitYearMax属性   日历。以下示例解析a的字符串表示形式   使用默认公历日历具有两位数年份的日期   美国文化。

来自GregorianCalendar.TwoDigitYearMax

  

此属性允许将2位数年份正确翻译为a   4位数年份。例如,如果此属性设置为2029,则   100年的范围是从1930年到2029年。因此,2位数值为30   被解释为1930年,而2位数值29被解释为   2029。

     

您的应用程序应将此值设置为99以指示该2位数   几年是字面上的。例如,如果设置了此属性   从99开始,100年范围从0开始(大多数情况下不是有效值)   日历)到99.因此,2位数值30被解释为   30。

即使您反编译GregorianCalendar.TwoDigitYearMax属性,也可以看到自己;

public override int TwoDigitYearMax
{
  get
  {
    if (this.twoDigitYearMax == -1)
      this.twoDigitYearMax = Calendar.GetSystemTwoDigitYearSetting(this.ID, 2029);
    return this.twoDigitYearMax;
  }

Boluc's answer完全正确。我想指出你的格式部分。

您无法使用YYYY格式格式化两位数年份。您需要使用允许两位数格式化的yy格式。

DateTime dt = DateTime.ParseExact("01-01-50 00:00:00", "dd-MM-yy HH:mm:ss", CultureInfo.InvariantCulture);

打印

01.01.1950 00:00:00

这里有 DEMO

查看Custom Date and Time Format Strings

的更多信息