Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图通过从日期中减去日期来获得整数_C#_Datetime_Date - Fatal编程技术网

C# 试图通过从日期中减去日期来获得整数

C# 试图通过从日期中减去日期来获得整数,c#,datetime,date,C#,Datetime,Date,使用此代码: 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

使用此代码:

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) {
. . .
public static bool platypusisafornight或lessold(int PlatypusID){
const int两周=14;
常量字符串sql=@“选择鸭嘴兽出生日期
来自PLATYPI
其中PLATYPUSID=:PLATYPUSID”;
日期时间dt;
试一试{
使用(var ocmd=newOracleCommand(sql,oc)){
添加(“PLATYPUSID”,PLATYPUSID);
dt=Convert.ToDateTime(ocmd.ExecuteScalar());
}
return(DateTime.Today-dt)您需要执行的操作

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

return(DateTime.Today-dt)。Days其他人建议从
TimeSpan
改为天数。我建议将
两周的时间也表示为
TimeSpan
更为清晰。或者,更好的做法是:将截止日期作为
DateTime
并完全避免减法:

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

    ... SQL stuff ...

    return dt >= oneFortnightAgo;
}

另外,我希望您在实际代码中没有真正捕获到
catch(异常e)
。您几乎不应该捕获
Exception
——而且绝对不能使用与执行SQL操作相同的方法。

附带说明,两周是14天……啊,是的,我当时在想什么(两周==14,!20)哦,我把它和一个“分数”搞混了。那个被接受的变化伤害了人……只是伤害了…@JT:对不起,不是针对个人的!我有很多陷阱(例外e)在我的代码中。为什么这么糟糕,尤其是在SQL操作中?有趣的是,Resharper没有抱怨。我不是怀疑你,Jon,只是好奇!顺便说一句,我知道你的意思,但实际上是AddDays()@ClayShannon:哎呀-PlusDays是我们在Noda Time中得到的,我认为它更干净,因为它更明显地返回了操作结果,而不是改变现有值:)捕获
异常
通常是不好的,因为它声称可以处理任何出错的事情-即使它是你真正没有注意到的东西xpect,不想尝试处理。通常只有“顶级”调用才应该处理异常(例如,为了中止请求但保持服务器处于活动状态),而不是正在执行实际SQL工作的业务调用。捕获异常e只是为了记录和重试如何?这是我通常做的(使用log4net):log.Error(e,e);扔;@ClayShannon:是的,那还不算太糟——除了把地方弄得乱七八糟。(你为什么不在顶层做呢?)