12

この質問は、「相対時間をどのように計算しますか? 」という質問の反対側です。

相対時間に対する人間の入力が与えられた場合、それをどのように解析できますか? デフォルトでは、 からオフセットしますがDateTime.Now()、オプションで別の からオフセットすることもできますDateTime

(C#での回答を好む)

入力例:

  • 「20分で」
  • "5時間前"
  • 「3時間2分」
  • "次の週"

編集: 入力にいくつかの制限を定義できるとしましょう。この種のコードは、Web 上にあると便利です。

4

5 に答える 5

7

Googleで検索すると、これを正確に実行するように設計されたparsedatetimeライブラリ( Chandlerプロジェクトに関連付けられている)が見つかります。オープンソース(Apache License)であり、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#ソリューションが必要な場合は、使用するアルゴリズムに基づいて何かを書くことができます...

また、多数の単体テストが付属しています。

于 2008-09-10T23:05:47.727 に答える
3

これは、日付処理用のDSL(ドメイン固有言語)を構築することです。誰かが.NET用に作成したかどうかはわかりませんが、DSLの構築はかなり簡単です。

  1. 言語を正確に定義し、どの入力フォームを受け入れるか、あいまいさをどのように処理するか
  2. 言語の文法を構築する
  3. 言語を実用的なASTに解析する有限状態マシンを構築します

このリンクに示されているように、(たとえば、ドラゴンブックの助けを借りて)自分で、または効果を発揮するツールの助けを借りて、これらすべてを行うことができます。

可能性について真剣に考えるだけで、優れたUIの例を使用して、アプリケーションが受け取る実際の入力の半分以上をカバーできる可能性が高くなります。人間が入力する可能性のあるすべてのものを受け入れることを目的とする場合は、あいまいであると判断された入力を記録し、本質的にあいまいなものがあるため、解釈できる場合はいつでも文法に追加できます。

于 2008-09-10T22:39:07.120 に答える
0

ルビーの人々は、 Chronicと呼ばれるパーサーでこれに取り組んでいます。

私は最近、著者がこの問題をどのように解決したかについての有益なビデオプレゼンテーションを見ました。

于 2008-09-10T23:08:30.920 に答える
-1

これ: http: //www.codeproject.com/KB/edit/dateparser.aspx あなたが達成しようとしていることにかなり近いです。最も洗練されたソリューションではありませんが、確かにいくつかの作業を節約できる可能性があります。

于 2008-09-10T23:03:30.590 に答える