這個問題是提問「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