C# 如何解析相对时间?

C# 如何解析相对时间?,c#,parsing,time,language-agnostic,C#,Parsing,Time,Language Agnostic,这个问题是另一个问题的另一面 给定一段相对时间内的一些人工输入,如何解析它?默认情况下,您可以从DateTime.Now()偏移,但也可以选择从另一个DateTime偏移 (更喜欢C#的答案) 输入示例: “20分钟后” “5小时前” “3h 2m” “下周” 编辑:假设我们可以对输入定义一些限制。这类代码在web上很有用。它正在构建一种用于数据处理的DSL(域特定语言)。我不知道是否有人为.NET做过一个,但DSL的构造相当简单: 准确地定义语言,您将接受哪些输入形式,以及如何处理歧义 为

这个问题是另一个问题的另一面

给定一段相对时间内的一些人工输入,如何解析它?默认情况下,您可以从
DateTime.Now()
偏移,但也可以选择从另一个
DateTime
偏移

(更喜欢C#的答案)

输入示例:

  • “20分钟后”
  • “5小时前”
  • “3h 2m”
  • “下周”
编辑:假设我们可以对输入定义一些限制。这类代码在web上很有用。

它正在构建一种用于数据处理的DSL(域特定语言)。我不知道是否有人为.NET做过一个,但DSL的构造相当简单:

  • 准确地定义语言,您将接受哪些输入形式,以及如何处理歧义
  • 为语言构建语法
  • 构建有限状态机,将您的语言解析为可操作的AST
  • 您可以自己(例如,借助于)或借助工具来完成所有这些,如图所示

    只要仔细考虑一下,在良好的UI示例的帮助下,您就有机会覆盖应用程序将收到的实际输入的一半以上。如果你的目标是接受人类可能键入的所有内容,你可以记录确定为不明确的输入,然后在可以解释的时候将其添加到语法中,因为有些内容本身就是不明确的。

    这是:
    非常接近你想要实现的目标。这不是最优雅的解决方案,但肯定会为您节省一些工作。

    谷歌搜索会找到库(与相关),它正是为此而设计的。它是开源的(Apache许可证),用Python编写。这似乎相当复杂--从主页上看:

    parsedatetime能够解析,例如 例如,以下内容:

    * 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实现的,并且不使用任何花哨的东西,所以它很有可能与兼容,所以您可以将它与.net一起使用。如果你特别想要一个C#解决方案,你可以根据他们使用的算法写一些东西


    它还附带了一系列的单元测试。

    ruby的人试图用一个名为Chronic的解析器来解决这个问题

    我最近看了一段内容丰富的视频,介绍作者如何着手解决这个问题


    这可能没有多大帮助,因为你说的是c语言,但因为还没有人提到它,你可以试着看看php优秀而疯狂的本机函数

    链接到视频会很好。我在c语言中成功地使用了它,它工作得很好。如果有人感兴趣,我可以把它上传到某个地方