27

Chronic for Ruby(「明日」や「次の木曜日の午後3時」などを処理する)に似た.NET日付/時刻パーサーを知っている人はいますか?

注:私はRuby(Chronicについて知っている方法)を作成しますが、このプロジェクトでは.NETを使用する必要があります。

4

9 に答える 9

12

私たちはあなたが内部プロジェクトで探しているものを正確に開発しました。十分な必要があれば公開することを考えています。詳細については、このブログをご覧ください:http: //precisionsoftwaredesign.com/blog.php

興味のある方はお気軽にご連絡ください:contact@precisionsoftware.us

このライブラリは現在SourceForgeプロジェクトです。ページは次のとおりです。

http://www.SourceForge.net/p/naturaldate

アセンブリはダウンロードセクションにあり、ソースはMercurialで入手できます。

于 2009-03-10T16:36:12.697 に答える
6

Chronic の .NET ポートが存在します。https://github.com/robertwilczynski/nChronicを参照してください。いくつかの改善とバグ修正を加えたフォークを作成しました。こちら: https://github.com/dorony/nChronic (プル リクエストを送信しましたが、作成者はまだ応答していません)。

于 2015-05-06T10:55:23.700 に答える
5

私はしませんが、jchronicという Java ポートがあります。他に何もないとしても、それはあなた自身の良い出発点を提供することができます. または、 Octopusのような半自動の Java から C# へのトランスレータを使用して、翻訳を支援することもできます。(または、誰かが何かを知っていれば、もっと良いものです。)

わかりました、別の可能な手段: IronRubyを使用して慢性的なコードを使用できますか?

于 2008-08-23T12:18:29.043 に答える
4

@ブレア・コンラッド - 良いアイデアです!Chronic を IronRuby で実行しようとしましたが、依存関係に問題がありました。まだ準備ができているかどうかわかりません。

同じことをしようとしているCodeplex ( DateTimeEnglishParser )のプロジェクトを見つけました。まだ何年も経っていませんが、良いスタートです。私はプロジェクトに少し取り組み、書かれた数字をより適切に処理するためのパッチを提供しました。

これは興味深い問題であり、正規表現をよりよく理解するのに確実に役立っているので、引き続き取り組みたいと思います。

于 2008-08-28T15:11:55.963 に答える
3

以前に同様のスレッドがあり、CodeProjectのライブラリへのリンクが提供されていました。これは、http://www.codeproject.com/KB/edit/dateparser.aspxですが、残念ながら、ライブラリは次のように記述されているようです。 MFCなので、それからDLLを作成し、.NETプログラムから呼び出す必要があります。

于 2009-01-21T21:02:25.483 に答える
3

いくつかのフレームワークをチェックしましたが、Python のParseDateTimeが最適でした。IronPython を使用して .NET から使用できます。

誰かが完全なサンプル プロジェクトに興味を持っている場合は、その回答にコメントしてください。作成を試みます。

編集

リクエストに応じて、ライブラリで使用できる簡単なプロジェクトを次に示します。

http://www.assembla.com/code/relativedateparser/subversion/nodes

たとえば、次の使用例を試してください。

  • 2008 年 8 月 25 日
  • 2008 年 8 月 25 日
  • 8月25日午後5時
  • 8月25日午後5時
  • 次の土曜日
  • 明日
  • 次の木曜日の午後 4 時
  • 午後4時
  • エード
  • 明日の日
  • 火曜日
  • イオイ
  • オム
  • 5分で
  • 今から5分
  • 今から5時間前
  • 正午2時間前
  • 明日から2日間
于 2011-12-20T06:35:58.307 に答える
3

Palmsey さん、最近同じ要件があったので、簡単なパーサーを書きました。これは最も優れたコードではありませんが、次のようなものを処理します。

「今日午後 2 時」「火曜日午後 2 時 - 2010 年 7 月 15 日午前 2 時」「前年午前 2 時 - 明日午前 14 時 30 分」「2010 年 7 月 18 日午後 2 時 45 分」

おそらく他の誰かが役に立つと思うので、コードプレックスに貼り付けてください。それをチェックしてください:http://timestamper.codeplex.com/

于 2009-05-10T13:12:53.267 に答える
2

私は1つを認識していませんが、それはクールな問題のように聞こえたので、ここに私の強打があります(VB.NET):

Private Function ConvertDateTimeToStringRelativeToNow(ByVal d As DateTime) As String
    Dim diff As TimeSpan = DateTime.Now().Subtract(d)
    If diff.Duration.TotalMinutes < 1 Then Return "Now"

    Dim str As String
    If diff.Duration.TotalDays > 365 Then
        str = CInt(diff.Duration.TotalDays / 365).ToString() & " years"
    ElseIf diff.Duration.TotalDays > 30 Then
        str = CInt(diff.TotalDays / 30).ToString() & " months"
    ElseIf diff.Duration.TotalHours > 24 Then
        str = CInt(diff.Duration.TotalHours / 24) & " days"
    ElseIf diff.Duration.TotalMinutes > 60 Then
        str = CInt(diff.Duration.TotalMinutes / 60) & " minutes"
    Else
        str = CInt(diff.Duration.TotalMinutes).ToString() & " minutes"
    End If
    If str.StartsWith("1") Then str = str.SubString(0, str.Length - 1)
    If diff.TotalDays > 0 Then
        str &= " ago"
    Else
        str &= " from now"
    End If
    Return str
End Function

既存のものほど洗練されたものではありませんが、問題なく動作すると思います。素敵な拡張方法かもしれません。

于 2008-08-23T01:41:34.220 に答える
1

@ Burton: 少なくともリンク先のページの例からすると、彼は別の意味で言っていると思います。

  Chronic.parse('tomorrow')
    #=> Mon Aug 28 12:00:00 PDT 2006

  Chronic.parse('monday', :context => :past)
    #=> Mon Aug 21 12:00:00 PDT 2006

  Chronic.parse('this tuesday 5:00')
    #=> Tue Aug 29 17:00:00 PDT 2006

気がつくまで私も刺してみようと思ってました!(いい実装だけど)

于 2008-08-23T01:53:16.377 に答える