我在一个项目中使用 NCalc。有没有办法进行日期操作,例如
#16/02/2013# - #15/02/2013# = 1
我似乎无法产生结果。
Expression.Evaluate();
上述表达式的结果为空。我可以比较两个日期,但是有没有办法使用 NCalc 对它们进行操作?
如果您乐于创建自定义函数,则可以在 ncalc 中轻松完成此操作。
Expression e = new Expression("DayDiff(#16/02/2013#, #15/02/2013#)");
e.EvaluateFunction += delegate(string name, FunctionArgs args)
{
if (name == "DayDiff")
{
var date1 = args.Parameters[0].Evaluate();
var date2 = args.Parameters[1].Evaluate();
var timespan = date2 - date1;
return timespan.TotalDays; // double (you can convert to int if you wish a whole number!)
}
}
Console.Write(e.Evaluate());
这对聚会来说已经很晚了,但我已经为 NCalc 构建了一个替代选项,称为Expressive。这也可以作为nuget 包使用。
它最初是为了匹配 NCalcs 功能而构建的,因此迁移应该只需要少量的工作。
您可以执行更多与日期相关的功能:
DaysBetween(#15/02/2013#, #16/02/2013#)
DateTime Date1, Date2;
Date1 = DateTime.Parse("2013-03-27 8:42:00");
Date2 = DateTime.Parse("2013-03-27 8:42:26");
TimeSpan TimeSpan1 = Date2 - Date1;
double DayDifference = TimeSpan1.TotalDays;