2008-09-10 7 views
12

この質問は「How do I calculate relative time?」という質問の反対側です。相対時間を解析する方法は?

人間が入力した相対時間はどのように解析できますか?デフォルトではDateTime.Now()からオフセットされていますが、任意で別のDateTimeからオフセットすることもできます。

(C#で答えを好む)

例入力: "20分で"

  • "5時間前"
  • "3H 2mの"
  • "来週"

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

+0

.netについては、[賢明な方法で日付を解析するC#](http://stackoverflow.com/a/25588407) –

答えて

3

これは、日付処理のためのDSL(ドメイン固有の言語)を構築しています。誰かが.NETのための1つを行っている場合、私は知らないが、DSLの構築は非常に簡単です:

  1. 曖昧
  2. とあなたが受け入れる、あなたは何をします形成する入力、正確に言語を定義しますあなたが(例えば、the Dragon Bookの助けを借りて)自分ですべてのことを行うことができます実用的なAST

にあなたの言語を解析する有限状態マシンを構築するかの助けを借りて

  • 言語のための文法を構築ショーのような効果をもたらすツールこのlinkのn。

    可能性について考えてみると、良いUIの例の助けを借りて、アプリケーションに実際の入力の半分以上をカバーする良いチャンスがあります。人間が入力する可能性のあるものすべてを受け入れることを目指すならば、あいまいであると判断された入力を記録し、解釈が可能なときはいつも文法に追加することができます。

  • +0

    の回答があります。nChronic(https://github.com/robertwilczynski/nChronic)for .NETをご覧ください。 。 – Larsenal

    7

    Google検索では、正確にこれを行うように設計されたparsedatetimeライブラリ(Chandler projectに関連付けられています)が表示されます。オープンソース(Apache License)でPythonで書かれています。非常に洗練されたように思わ - ホームページから:、以下

    parsedatetimeは 例えば、解析することができます:それは純粋なPythonで実装していないんだから

    * 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 
    

    何でも気をつけてください。IronPythonと互換性がある可能性が高いので、.netと一緒に使うことができます。具体的にC#ソリューションが必要な場合は、使用するアルゴリズムに基づいて何かを書くことができます...

    また、ユニットテストの全体が付属しています。

    +0

    私はC#からの使用に成功しており、とてもうまく動作します。誰かが興味があれば、どこかにアップロードすることができます。 – VitalyB

    0

    あなたは、C#を話しているので、これはすべてが役に立つ可能性はありませんが、誰のは、それを言及していない、まだあなたは、PHPの優れたと全く非常識なネイティブstrtotime機能

    を見てみることを試みることができるので、
    関連する問題