比较日期作为字符串

本文关键字:字符串 日期 比较 | 更新日期: 2023-09-27 18:07:40

我找不到一种方法来查找从现在起至少一年以内的所有日期(字符串)。

我保持在数据库日期字段字符串,如"DateTime.toShortDateString()",我现在需要比较。

它看起来像月/日/年= 9/6/2011

它需要从DateTime.now开始至少低一年。

我这样做了,它没有返回所有需要的日期。

        DateTime Date = DateTime.Now;
        int Year = Date.Year;
        Year -= 1;
        int Month = Date.Month;
        string MonthYear = Month.ToString() + "%" + Year.ToString();
        string Query = "SELECT * FROM Orders WHERE DateOrder < @STU ";
           SqlCommand cmd = new SqlCommand(Query, con);
                cmd.Parameters.AddWithValue("@STU", MonthYear);

比较日期作为字符串

修改数据库模式并将日期存储为ISO 8601格式(yyyy-mm-dd)或ISO 8601紧凑格式(yyyymmdd)的char(10)

  • http://www.cl.cam.ac.uk/~ mgk25/iso-time.html
  • http://en.wikipedia.org/wiki/ISO_8601

给你正确的排序和正确的比较。此外,DateTime.Parse()和TryParse()都将接受该格式,而不考虑文化(嗯…只有一个例外:沙特阿拉伯。图)。DateTime.ToString("Y") or字符串。Format("{0:Y}", someDateTimeInstance) '将给出ISO 8601格式。

应该是对数据库的一个简单的更新。

如果你使用的是SQL Server 2008:使用新的数据类型Date存储日期就更好了。

也许反序列化这些DateTime字符串,然后比较作为DateTime对象?

var date=DateTime.Parse(stringFromDb, new CultureInfo("en-US"));

那么你可以这样做:

if (dateToCompare1 < dateToCompare2)

或者任何你想要的比较运算符

编辑:从你的评论中,我认为你只希望使用从现在起一年以后的日期(或等于?)所以你可以这样做:

var date=DateTime.Parse(stringFromDb, new CultureInfo("en-US"));
if (date >= DateTime.Now.AddYears(1) {
   // Do whatever you want with the "kept" dates
}

假设你有一个字符串:

string strDate1 = "09/06/2011";
string strDate2 = "09/06/2011";
DateTime date1 = DateTime.Parse(strDate1);
DateTime date2 = DateTime.Parse(strDate2);