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:是的,那还不算太糟——除了把地方弄得乱七八糟。(你为什么不在顶层做呢?)