2008-09-10 67 views
12

這個問題是提問「How do I calculate relative time?」的另一面。如何解析相對時間?

給定一些相對時間的人爲輸入,你怎麼解析它?默認情況下,您將從DateTime.Now()偏移,但可以選擇偏移另一個DateTime

(不想在C#的答案)

示例輸入:

  • 「在20分鐘內」
  • 「10個小時前」
  • 「3H2米」
  • 「下週」

編輯:假設我們可以在輸入上定義一些限制。這種代碼將是一個有用的東西,在網絡上。

+0

對於.net有[解析日期C#的聰明的方式]答案(http://stackoverflow.com/a/25588407) – 2016-07-03 04:37:20

回答

3

這是爲日期處理構建DSL(域特定語言)。我不知道,如果有人做了一個針對.NET但DSL的建設是相當簡單:

  1. 精確定義的語言,輸入表單,你會接受什麼將爲您做歧義
  2. 構建語法的語言
  3. 構建有限狀態機,它分析你的語言轉化爲實際的AST

你可以做一切自己(與the Dragon Book的幫助,例如)或與幫助工具的效果,如顯示n在這link

只要想好可能性,你就有很好的機會,在良好的UI示例的幫助下,覆蓋超過一半的實際輸入你的應用程序將收到。如果您的目標是接受人類可能輸入的所有內容,那麼您可以將確定的輸入記錄爲不明確的,然後將它們添加到語法中,只要它們可以解釋,因爲這些內容會固有含糊不清。

+0

檢查nChronic(https://github.com/robertwilczynski/nChronic)爲.NET 。 – Larsenal 2012-02-02 21:51:30

7

谷歌搜索將出現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#解決方案,你可以根據他們使用的算法編寫一些東西......

它還附帶了一大堆單元測試。

+0

我成功地從C#中使用它,它工作得很好。如果有人有興趣,我可以在任何地方上傳。 – VitalyB 2011-12-20 06:27:41

0

這可能不是所有的幫助的,因爲你說的C#,但因爲沒有人沒有提到它,你可以嘗試看看PHP的優秀,完全瘋了本地strtotime功能