这个问题是提问“How do I calculate relative time?”的另一面。如何解析相对时间?
给定一些相对时间的人为输入,你怎么解析它?默认情况下,您将从DateTime.Now()
偏移,但可以选择偏移另一个DateTime
。
(不想在C#的答案)
示例输入:
- “在20分钟内”
- “10个小时前”
- “3H2米”
- “下周”
编辑:假设我们可以在输入上定义一些限制。这种代码将是一个有用的东西,在网络上。
这个问题是提问“How do I calculate relative time?”的另一面。如何解析相对时间?
给定一些相对时间的人为输入,你怎么解析它?默认情况下,您将从DateTime.Now()
偏移,但可以选择偏移另一个DateTime
。
(不想在C#的答案)
示例输入:
编辑:假设我们可以在输入上定义一些限制。这种代码将是一个有用的东西,在网络上。
这是为日期处理构建DSL(域特定语言)。我不知道,如果有人做了一个针对.NET但DSL的建设是相当简单:
你可以做一切自己(与the Dragon Book的帮助,例如)或与帮助工具的效果,如显示n在这link。
只要想好可能性,你就有很好的机会,在良好的UI示例的帮助下,覆盖超过一半的实际输入你的应用程序将收到。如果您的目标是接受人类可能输入的所有内容,那么您可以将确定的输入记录为不明确的,然后将它们添加到语法中,只要它们可以解释,因为这些内容会固有含糊不清。
检查nChronic(https://github.com/robertwilczynski/nChronic)为.NET 。 – Larsenal 2012-02-02 21:51:30
This:http://www.codeproject.com/KB/edit/dateparser.aspx 与您试图完成的工作相当接近。不是最优雅的解决方案,但肯定可以为您节省一些工作。
谷歌搜索将出现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#中使用它,它工作得很好。如果有人有兴趣,我可以在任何地方上传。 – VitalyB 2011-12-20 06:27:41
这可能不是所有的帮助的,因为你说的C#,但因为没有人没有提到它,你可以尝试看看PHP的优秀,完全疯了本地strtotime功能
对于.net有[解析日期C#的聪明的方式]答案(http://stackoverflow.com/a/25588407) – 2016-07-03 04:37:20