簡體   English   中英

如何解析相對時間?

[英]How to parse relative time?

這個問題是問題的另一面,“ 我如何計算相對時間? ”。

鑒於相對時間的一些人工輸入,您如何解析它? 默認情況下,您將從DateTime.Now()偏移,但可以選擇從另一個DateTime偏移。

(首選 C# 中的答案)

示例輸入:

  • “在 20 分鍾內”
  • “5小時前”
  • “3 小時 2 米”
  • “下周”

編輯:假設我們可以對輸入定義一些限制。 這種代碼在網絡上會很有用。

Google 搜索出現了parsedatetime庫(與Chandler 項目相關聯),它的設計正是為了做到這一點。 它是開源的(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# 解決方案,你可以根據他們使用的算法編寫一些東西......

它還帶有一大堆單元測試。

那就是為日期處理構建 DSL(域特定語言)。 我不知道是否有人為 .NET 做過一個,但 DSL 的構建相當簡單:

  1. 准確定義語言,您將接受哪些輸入形式以及您將如何處理歧義
  2. 構建語言的語法
  3. 構建有限狀態機,將您的語言解析為可操作的 AST

您可以自己完成所有這些(例如在龍之書的幫助下)或借助工具來實現,如此鏈接中所示。

只需仔細考慮各種可能性,借助優秀的 UI 示例,您就有很好的機會覆蓋應用程序將收到的實際輸入的一半以上。 如果您的目標是接受人類可能輸入的所有內容,您可以記錄確定為不明確的輸入,然后將它們添加到語法中,只要它們可以被解釋,因為有些東西本質上是不明確的。

ruby 人員試圖用一個叫做Chronic的解析器來解決這個問題。

我最近觀看了有關作者如何解決這個問題的內容豐富的視頻演示。

這可能不是那么有用,因為你在談論 c# 但因為沒有人提到它,你可以嘗試看看 php 優秀且完全瘋狂的原生strtotime函數

這: http : //www.codeproject.com/KB/edit/dateparser.aspx與您要完成的任務非常接近。 不是最優雅的解決方案,但肯定可以為您節省一些工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM