【问题标题】:How can I parse Kusto timespan strings in C#?如何在 C# 中解析 Kusto 时间跨度字符串?
【发布时间】:2019-05-03 17:36:20
【问题描述】:

例如,我尝试了TimeSpan.Parse("2d"),但这不起作用。

Kusto timespan 的格式似乎不受任何 TimeSpan.Parse() 风格的支持。

【问题讨论】:

  • .Net 的Timespan 不会解析这些格式。您必须自己实现解析。不过,Stack Overflow 不是代码编写服务。您能否与我们分享您将“2d”等值解析为TimeSpan 的尝试?
  • 很抱歉。我想会有一个 Kusto IFormatProvider 或类似的东西。让别人为我写这篇文章当然不是我的本意:)。
  • 投反对票或关闭“太广泛”都不合适。这个问题非常狭窄和具体,提问者通过展示代码尝试和权威来源的链接来展示研究。

标签: c# timespan azure-data-explorer


【解决方案1】:

适用于 .NET 的 Kusto 数据客户端 SDK(在 Microsoft.Azure.Kusto.Data nuget 包中)有一个可以理解这种格式的 CslTimeSpanLiteral 类。它包含几个用于将字符串解析为 .NET 的 TimeSpan 结构的静态方法。

例如:

using Kusto.Data.Common;

...

TimeSpan? ts = CslTimeSpanLiteral.Parse("2d");

除了Parse,还有ParseNoNullTryParseTryParseNoNull

【讨论】:

  • client library 文档似乎很差。我还下载了包,但没有找到任何文档。最后,我尝试在 Google 上快速搜索 CslTimeSpanLiteral,但没有得到任何相关结果。你有什么推荐的来源吗?如果是这样,请在答案中链接到它,否则,鉴于公开可用的文档,它仍然是一个很好的答案:)。
  • 我只是下载了客户端库并搜索了合适的函数。我同意,在这方面文档可能会更好。
【解决方案2】:

c# 中的TimeSpan.Parse 无法识别 Kusto 时间跨度字符串,如 2d、2h 等。

我们不知道您解析它的目的,但您可以使用如下代码:

        string mytime = "2d";

        if (mytime.EndsWith("d"))
        {
            mytime = mytime.Remove(mytime.IndexOf('d'));
            var dt = DateTime.Now.AddDays(Convert.ToDouble(mytime));
            Console.WriteLine(dt.ToString());
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2010-09-16
    相关资源
    最近更新 更多