比较.net中的日期

本文关键字:日期 net 比较 | 更新日期: 2023-09-27 18:25:19

我想比较两个日期。从这两个日期中,我只使用ToShortDateString()获取日期组件,如下所示。现在的问题是当我比较这两个日期的时候。它的抛出错误——

"运算符>=不能应用于字符串和字符串类型的操作数。"

DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
 (DateTime.Now.ToShortDateString() >= srtdate.ToShortDateString()) 

我只需要比较日期组件,而不是一起比较日期和时间。

请提出替代方式。感谢

到JON:-

(我仔细阅读了你解释的所有内容,希望能理解你真正想表达的观点。为了澄清更多并做最后的检查,我将举一个例子。)我有一个web界面,在那里我可以为XYZ名称提供开始日期和结束日期(注意,我只能在这里输入日期,而不能输入时间)。

开始日期-2012年2月22日

现在在后端(代码)中,如果开始日期和结束日期与当前日期相同,或者当前日期介于开始日期和终止日期之间,我希望设置ACTIVE标志,否则不设置。我给出的条件是:-

if ((DateTime.Today >= strdate.Date) && (DateTime.Today <= enddate.Date))
                    lblCondition.Text = "CHECKED";

现在当我调试代码时,

DateTime.Taydaystrdate.Date都给出了2012年2月22日12:00:00 AM的值。

所以,Jon我的问题是:-"今天"answers"日期"是否能按照上述要求工作,其中只使用了日期组件。我希望它会。

非常感谢你之前的解释。

比较.net中的日期

为什么要转换为字符串表示?如果只想将日期部分与两个DateTime值进行比较,只需对每个值使用Date属性即可:

if (x.Date >= y.Date)

并且Today的性质等价于DateTime.Now.Date

DateToday都去掉了时间部分,留下了午夜时间。仍然有一个能够表示时间的类型并不理想,但这正是DateTime API的工作方式:(

请注意,您通常应该避免在web应用程序中使用DateTime.NowDateTime.Today,除非您真的习惯于使用系统默认时区作为日期边界。用户对"今天"的想法可能与服务器的想法不同。

您应该避免使用字符串转换,除非您的目标是真正来获得文本表示。

当然,另一种选择是使用我正在构建的日期/时间库Noda time,在那里你可以使用LocalDate类型——显然,这让你更清楚地知道,你只对日期感兴趣,而对时间不感兴趣。

编辑:由于OP似乎不相信Date真的忽略时间分量,因此这里有一个例子:

using System;
public class Test
{
    static void Main()
    {
        // Two DateTime values with different times but
        // on the same date
        DateTime early = new DateTime(2012, 2, 22, 6, 0, 0);
        DateTime late = new DateTime(2012, 2, 22, 18, 0, 0);
        Console.WriteLine(early == late); // False
        Console.WriteLine(early.Date == late.Date); // True
    }    
}
DateTime.Today >= strdate.Date

一些想法

考虑以下示例:您需要比较以下数字1.5和2.5。这些在.Net中表示为十进制、双精度或浮点,但我们使用十进制。较大的是2.5
假设你需要比较这些数字(1)的积分部分。和2.)。您仍将使用十进制类型进行比较。

Math.Truncate(x) ? Math.Truncate(y) // x = 1.5, y = 2.5

与DateTime相同。DateTime.Date将返回日期的"整数"部分作为Math。Truncate返回"实数"的整数部分,但两者都将基于其原始类型。

希望这对您有所帮助。

using System;
public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
      DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
      int result = DateTime.Compare(date1, date2);
      string relationship;
      if (result < 0)
         relationship = "is earlier than";
      else if (result == 0)
         relationship = "is the same time as";         
      else
         relationship = "is later than";
      Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
   }
}
// The example displays the following output: 
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM