【发布时间】:2019-02-25 14:06:06
【问题描述】:
我在一个项目中使用 NCalc。有没有办法进行日期操作,如
#16/02/2013# - #15/02/2013# = 1
我似乎无法产生结果。
Expression.Evaluate();
上述表达式的结果为空。我可以比较两个日期,但有没有办法使用 NCalc 对它们进行操作?
【问题讨论】:
我在一个项目中使用 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());
【讨论】:
args.Result 返回结果,因为 EvaluateFunction 是无效的。 [链接(github.com/sheetsync/NCalc/wiki)
这对聚会来说已经很晚了,但我已经为 NCalc 构建了一个替代选项,称为 Expressive。这也可以作为nuget package 使用。
它最初是为匹配 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;
【讨论】: