NCalc日期操作

时间:2013-03-27 14:40:12

标签: c# ncalc

我在一个项目中使用NCalc。有没有办法像

那样进行日期操作
  

#16/02/2013# - #15/02/2013#= 1

我似乎无法产生结果。

Expression.Evaluate();

上述表达式的结果为空。我可以比较两个日期,但有没有办法使用NCalc对它们进行操作?

4 个答案:

答案 0 :(得分:8)

如果您乐意创建自定义函数,则可以非常轻松地在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());

答案 1 :(得分:3)

不,NCalc库不允许这样做。

Read这个相关话题。

但是你可以用NCalc来做。

假设ab的类型为DateTime(a - b).TotalDays将返回天数。

答案 2 :(得分:1)

这对聚会来说很晚,但是我为NCalc建立了一个名为Expressive的替代选项。也可以使用nuget package

它最初是为匹配NCalcs功能而构建的,因此迁移只需要少量的工作。

您可以执行更多与日期相关的功能:

DaysBetween(#15/02/2013#, #16/02/2013#)

答案 3 :(得分:-1)

    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;