Lar*_*nal 12 c# language-agnostic time parsing
这个问题是问题的另一面,问" 我如何计算相对时间? ".
鉴于相对时间的一些人为输入,你如何解析它?默认情况下,您将偏移DateTime.Now(),但可以选择从另一个偏移DateTime.
(首选C#中的答案)
输入示例:
编辑: 我们假设我们可以在输入上定义一些限制.这种代码在网络上是有用的.
Google搜索会显示解析时间库(与Chandler项目相关联),该库旨在完成此操作.它是开源的(Apache许可证),用Python编写.它似乎相当复杂 - 从主页:
parsedatetime能够解析,例如,以下内容:
Run Code Online (Sandbox Code Playgroud)* Aug 25 5pm * 5pm August 25 * next saturday ... * tomorrow * next thursday at 4pm * at 4pm * eod * in 5 minutes * 5 minutes from now * 5 hours before now * 2 days from tomorrow
由于它是用纯Python实现的,并没有使用任何花哨的东西,因此很有可能它与IronPython兼容,因此你可以将它与.net一起使用.如果你想要专门的C#解决方案,你可以根据他们使用的算法写一些东西......
它还附带了一大堆单元测试.
这就是构建用于日期处理的 DSL(领域特定语言)。我不知道是否有人为 .NET 做过这样的事情,但 DSL 的构建相当简单:
您可以自己完成所有这些工作(例如,在《龙之书》的帮助下)或借助工具来完成所有这些工作,如本链接所示。
只要认真思考各种可能性,借助优秀的 UI 示例,您就有很好的机会覆盖应用程序将收到的实际输入的一半以上。如果您的目标是接受人类可能输入的所有内容,则可以记录被确定为不明确的输入,然后在可以解释的时候将它们添加到语法中,因为有些东西本质上是不明确的。