如何解析相对时间?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解析相对时间?相关的知识,希望对你有一定的参考价值。
这个问题是问题的另一面,“How do I calculate relative time?”。
鉴于相对时间的一些人为输入,你如何解析它?默认情况下,您将从DateTime.Now()
偏移,但可以选择从另一个DateTime
偏移。
(首选C#中的答案)
输入示例:
- “在20分钟内”
- “5小时前”
- “妈妈的妈妈”
- “下周”
编辑:我们假设我们可以在输入上定义一些限制。这种代码在网络上是一个有用的东西。
那是为日期处理构建DSL(特定于域的语言)。我不知道是否有人为.NET做过一个但是DSL的构造相当简单:
- 准确定义语言,您将接受哪些输入表单以及您将如何处理歧义
- 构造语言的语法
- 构建将您的语言解析为可操作AST的有限状态机
你可以自己完成所有这些工作(例如在the Dragon Book的帮助下)或者使用工具来帮助实现效果,如link所示。
只需通过良好的UI示例,您就可以很好地考虑可能性,覆盖应用程序将获得的实际输入的一半以上。如果您的目标是接受人类可能输入的所有内容,您可以记录确定为含糊不清的输入,然后将它们添加到语法中,只要它们可以被解释,因为有些内容本身就是模棱两可的。
谷歌搜索出现了parsedatetime库(与Chandler project相关联),它正是为此而设计的。它是开源的(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实现的,并没有使用任何花哨的东西,因此很有可能它与IronPython兼容,所以你可以将它与.net一起使用。如果你想要专门的C#解决方案,你可以根据他们使用的算法写一些东西......
它还附带了一大堆单元测试。
这可能不是那么有用,因为你正在谈论c#,但因为没有人提到它你可以尝试看看php的优秀和完全疯狂的本地strtotime功能
红宝石人试图通过名为Chronic的解析器来解决这个问题。
我最近观看了一个关于作者如何解决这个问题的信息性视频演示。
这:http://www.codeproject.com/KB/edit/dateparser.aspx非常接近你想要完成的事情。不是最优雅的解决方案,但肯定可以为您节省一些工作。
以上是关于如何解析相对时间?的主要内容,如果未能解决你的问题,请参考以下文章
无法解析片段中的 ViewModelProvider 构造?