问题的另一方是“How do I calculate relative time?”。
考虑到相对时间的一些人为输入,你如何解析它?默认情况下,您将偏离DateTime.Now()
,但可以选择从另一个DateTime
偏移。
(首选C#中的答案)
示例输入:
编辑:我们假设我们可以在输入上定义一些限制。这种代码在网络上是有用的。
答案 0 :(得分:7)
Google搜索会调出parsedatetime库(与Chandler project相关联),该库旨在完成此操作。它是开源的(Apache许可证),用Python编写。它似乎非常复杂 - 从主页:
parsedatetime能够解析,for 例如,以下内容:
* 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#解决方案,你可以根据他们使用的算法编写一些东西......
它还附带了大量的单元测试。
答案 1 :(得分:3)
正在构建用于日期处理的DSL(特定于域的语言)。我不知道是否有人为.NET做过一个但是DSL的构建相当简单:
您可以自己完成所有这些操作(例如,在the Dragon Book的帮助下)或在效果工具的帮助下,如link所示。
通过在良好的UI示例的帮助下,您可以很好地考虑可能性,覆盖应用程序将接收的实际输入的一半以上。如果您的目标是接受人类可能输入的所有内容,您可以将输入确定为不明确的输入,然后将它们添加到语法中,只要它们可以被解释,因为有些内容本身就不明确。
答案 2 :(得分:0)
红宝石人试图通过名为慢性的解析器来解决这个问题。
我最近看了一篇关于作者如何解决这个问题的信息性视频演示。
答案 3 :(得分:0)
这可能不是那么有用,因为你正在谈论c#但是因为没有人提到它你可以尝试看看php的优秀和完全疯狂的原生strtotime功能
答案 4 :(得分:-1)
这:http://www.codeproject.com/KB/edit/dateparser.aspx 与你想要完成的事情相当接近。不是最优雅的解决方案,但肯定可以为您节省一些工作。