C#Library解析人类可读的时间跨度

时间:2009-08-20 08:09:21

标签: c# parsing date

是否存在将人类可读时间片解析为.net TimeSpan的库?

我需要能够解析

等字符串的东西
30 days
1 week
5 hours

这样的事情存在吗?它可能不是很难写自己,但如果有什么东西,它会更容易!

我目前不需要像“30天,3小时,5分钟”这样的功能,只需要一个值,但它不会受到伤害!

7 个答案:

答案 0 :(得分:4)

我在这个时候拿了一个破解,我正在玩解析器,因为我对它们一无所知,所以不要期待质量。但您可以在此处获取代码:http://timestamper.codeplex.com/

我暂时没看过它,但我很确定它可以做你上面提到的所有事情。

编辑:

刚才注意到你想要一个timepan对象返回而不是一个日期时间。我提供的代码将返回与今天相关的DateTime,即

“2天”将是:DateTime.Now.AddDays(2);

至少我认为这是做了什么,可以肯定。如果是这种情况,您应该能够获得两个DateTimes之间的时间跨度。

答案 1 :(得分:2)

这可能早就该了,但是Microsoft最近发布了其提取器和解析器的nuget包和源,它们是LUIS(Azure中的语言服务)的基础。

您可以在这里找到它们: GitHub Repo

我的猜测是,对于大多数项目来说,这就像用手提钻打苍蝇一样,但是幸运的是,可以独立下载单独的软件包(例如,用于DateTime的软件包)。

The NuGet package that answers the question

答案 2 :(得分:0)

我主要基于时间戳来研究Dotnet框架(和dotnet核心)上的库。

  

从Nuget安装:HumanDateParser

用法:(返回System.DateTime

DateParser.Parse("1 month ago")
DateParser.Parse("after 15 days")
DateParser.Parse("15th feb 2010 at 5:30pm")

答案 3 :(得分:-1)

嗯,我知道datejs javascript代码非常适合这样的日期。您可以将其视为C#代码的灵感来源。不确定这是否有帮助;但可能很有趣。

请访问www.datejs.com

答案 4 :(得分:-1)

我知道您正在寻找一个库来执行此操作,但似乎喜欢这种语法的人是ruby开发人员,他们坚持使用Ruby。如果你真的想这样做,那么做一些类似于.Net Extensions的东西非常简单,它更具可读性。看看这篇文章http://haacked.com/archive/2007/05/24/ruby-like-syntax-in-c-3.0.aspx

此外,如果你不喜欢文章中的语法,那么你需要做的就是创建一个解析器,它可以转换为ticks,可以由timespan构造函数类使用。

答案 5 :(得分:-1)

这不是直接适用的,但是my company已经制定了.NET library来执行此约会。一个适用于跨度的对应物(或多或少正是你所要求的)被计划为“当我们需要它时”。如果有足够的兴趣,那可能会更快。

答案 6 :(得分:-3)

这是日期和时间的可用解析方式:

Parsing Date and Time Strings