3

使用此代码:

public static bool PlatypusIsAFornightOrLessOld(int PlatypusID) {
const int FORTNIGHT = 14;
const string sql = @"SELECT PLATYPUSBIRTHDATE
            FROM PLATYPI 
            WHERE PLATYPUSID = :PLATYPUSID";
DateTime dt;
try {
    using (var ocmd = new OracleCommand(sql, oc)) {
        ocmd.Parameters.Add("PLATYPUSID", PlatypusID);
        dt = Convert.ToDateTime(ocmd.ExecuteScalar());
    }
    return (DateTime.Today - dt) <= FORTNIGHT;
} catch (Exception e) {
. . .

我得到:“返回”行上的“运算符'<='不能应用于'System.TimeSpan'和'int'类型的操作数”。

4

2 回答 2

7

你需要做

return (DateTime.Today - dt).Days <= FORTNIGHT;

Days返回时间跨度的完整天数。如果您需要小数天数,您将使用 TotalDays。

于 2012-07-23T18:55:58.287 回答
6

其他人建议TimeSpan天数。我建议将其表示FORTNIGHT为 a更清洁TimeSpan。或者,更好的是:将截止日期计算为 aDateTime并完全避免减法:

public static bool PlatypusIsAFornightOrLessOld(int platypusId) {
    DateTime oneFortnightAgo = DateTime.Today.AddDays(-14);

    ... SQL stuff ...

    return dt >= oneFortnightAgo;
}

另外,我希望您还没有真正了解catch(Exception e)您的真实代码。您几乎应该抓住Exception- 绝对不是在执行 SQL 操作的同一方法中。

于 2012-07-23T19:03:09.603 回答