【问题标题】:How to filter string date?如何过滤字符串日期?
【发布时间】:2020-05-01 21:43:41
【问题描述】:

我正在处理一个日期,因为数据太大,我需要对其进行过滤。这是我目前尝试的代码。

string value = Datetime.Now.tostring("yyyy-MM-dd");
DateTime fromdate;
fromdate = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
DateTime todate;
todate = DateTime.Now.ToString("yyyy-MM-dd");

 if((value >= fromdate) && (value <= todate))
{
//filtered items
}

错误总是说的

运算符 >= 不能应用于字符串类型和系统日期时间的操作数

我的代码的哪一部分是错误的?

【问题讨论】:

  • 为什么要将 DateTime 变量解析为字符串?您应该比较实际日期
  • @SteveZ 我正在制作一种没有时间的新日期格式。
  • 为了比较,您可以使用DateTime.Now.Datefromdate.Date。这仅包括日期(时间为 00:00:00)
  • @Ilorra 即使您使用的是“新格式”,为什么还要解析 DateTime 然后使用它进行比较。仅将date.ToString("yyyy-MM-dd") 用于显示目的。
  • value 和 todate 总是相等的,fromdate 总是小于 value 所以 if 条件总是为真

标签: c# string datetime filtering


【解决方案1】:

不需要解析和转换日期,直接处理日期即可

DateTime val = DateTime.Now.Date;

DateTime fromdate = DateTime.Now.AddDays(-2).Date;

DateTime todate = DateTime.Now;

if((val >= fromdate) && (val <= todate))
{
//filtered items
  Console.WriteLine("do something");
}

【讨论】:

    【解决方案2】:

    需要使用DateTime.Parse方法转换成日期:

    if ((DateTime.Parse(value) >= fromdate && ((DateTime.Parse(value) <= todate))
    

    这段代码运行良好:

    string value = DateTime.Now.ToString("yyyy-MM-dd");
    DateTime fromdate;
    fromdate = DateTime.Now.AddDays(-2);
    DateTime todate;
    todate = DateTime.Now;
    
    if ((DateTime.Parse(value) >= fromdate && ((DateTime.Parse(value) <= todate))))
    {
        //filtered items
    }
    

    【讨论】:

      【解决方案3】:

      这行能编译吗?

      fromdate = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
      

      您将 fromdate 定义为 DateTime 并尝试为其分配一个字符串

      DateTime fromdate;
      fromdate = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
      

      同样适用于 toDate

      【讨论】:

        【解决方案4】:
        var now = Datetime.Now;
        var value = now.Date;
        var fromdate = now.AddDays(-2).Date;
        var todate = now.Date;
        
        if((value >= fromdate) && (value <= todate))
        {
            //filtered items
        }
        

        这可以更简单,因为 value 和 todate 总是相同的,并且 value 总是大于 fromdate。所以 if 条件总是为真。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-20
          • 1970-01-01
          • 2022-01-02
          • 1970-01-01
          • 2020-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多