【问题标题】:NCalc date operationsNCalc 日期运算
【发布时间】:2019-02-25 14:06:06
【问题描述】:

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

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

我似乎无法产生结果。

Expression.Evaluate();

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

【问题讨论】:

    标签: c# ncalc


    【解决方案1】:

    如果您乐于创建自定义函数,您可以在 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
    • @RobVonNesselrode,听起来不错。我的答案现在已经四岁半了!
    【解决方案2】:

    不,NCalc 库不允许这样做。

    Read这个相关话题。

    但你可以不使用 NCalc。

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

    【讨论】:

    • 谢谢,但我需要 NCalc,因为我需要在 GUI 上为最终用户提供表达式编辑选项。您的链接非常有用。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 不仅表现力强,而且令人印象深刻。感谢您让我知道您的项目。
    • 我喜欢你在那里所做的 :)
    【解决方案4】:
        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;
    

    【讨论】:

    • 它和 NCalc 有什么关系?
    • 不是。它只是在 C# 中减去日期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多