4

我在一个项目中使用 NCalc。有没有办法进行日期操作,例如

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

我似乎无法产生结果。

Expression.Evaluate();

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

4

4 回答 4

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());
于 2015-01-21T11:52:24.083 回答
3

不,NCalc库不允许这样做。

阅读此相关主题。

但是你可以在没有 NCalc 的情况下做到这一点。

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

于 2013-03-27T14:57:57.770 回答
1

这对聚会来说已经很晚了,但我已经为 NCalc 构建了一个替代选项,称为Expressive。这也可以作为nuget 包使用。

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

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

DaysBetween(#15/02/2013#, #16/02/2013#)
于 2019-02-25T06:06:06.463 回答
-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;
于 2013-03-27T14:42:58.927 回答