将日期比较为字符串

时间:2011-09-06 21:12:00

标签: c# sql wpf

我找不到找到所有日期(字符串)的方法,至少在一年之后找不到。

我保留数据库日期字段字符串,如“DateTime.toShortDateString()”,我现在需要进行比较。

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

需要从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);

这是我的问题

3 个答案:

答案 0 :(得分:3)

修改数据库架构,并以ISO 8601格式(char(10))或ISO 8601压缩格式(yyyy-mm-dd)将日期存储为yyyymmdd

这为您提供了适当的整理和适当的比较。更进一步...... DateTime.Parse()和TryParse()都会接受这种格式而不管文化(嗯......一个例外:沙特阿拉伯,ar-SA。去图)。 DateTime.ToString("Y") or string.Format(“{0:Y}”,someDateTimeInstance)`将为您提供ISO 8601格式。

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

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

答案 1 :(得分:2)

也许反序列化这些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
}

答案 2 :(得分:1)

假设你有一个字符串:

string strDate1 = "09/06/2011";
string strDate2 = "09/06/2011";

DateTime date1 = DateTime.Parse(strDate1);
DateTime date2 = DateTime.Parse(strDate2);

然后比较它们。