文字列に保存されている日付からプログラムでパターンを作成するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/43842

  •  09-06-2019
  •  | 
  •  

質問

日付の表現を含む文字列があります。次のようになります:

2006 年 11 月 30 日木曜日 19:00:00 EST

SimpleDateFormat を使用して Date オブジェクトを作成しようとしていますが、2 つの問題があります。

1.) SimpleDateFormat コンストラクターにソリューションをハードコーディングするパターンがわかりません

2.) API を使用して文字列を解析してパターンを決定し、これをさまざまな日付出力パターンに再利用できる方法が見つかりません。

API またはカスタム ソリューションを使用したソリューションを知っている人がいたら、大変感謝します。

役に立ちましたか?

解決

SimpleDateFormat に渡す形式は次のように検索できます。 http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html

new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy")

2 番目の質問に関しては、事前に形式が何であるかを知らなくても、日付形式を把握して解析できる Java ライブラリを私は知りません。

他のヒント

POJava 日付パーサー org.pojava.datetime.DateTime は、複数の言語、タイムゾーン、および形式をサポートする不変で堅牢なパーサーです。

何よりも、パーサーはヒューリスティックであり、動作するために既存の「形式」を必要としません。日付/日付/時刻のテキスト文字列を渡すだけで、java.util.Date が得られます。

日付を解析してそのパターンを解明する簡単な方法があるかどうかはわかりませんが、あなたが投稿したもののパターンは次のようになると思います。

EEE MMM dd HH:mm:ss zzz yyyy

日付の解析や書式設定以外のことをしたい場合、パターン自体を処理する方法はあまりありません。少し前、私は書式設定されたテキストフィールドに日付を入力するための Swing コンポーネントを作成していました。パターンを指定すると、そのパターンの要素間でテキスト入力カーソルが移動し、有効な値のみが許可されます。

その一環として、DateFormatParser を作成しました。 OpenHarmonise オープンソース プロジェクトの一部としてここから入手できます.

日付をパターンに解析することは、取り組むべき非常に興味深い問題となるでしょう。特定の仮定を立てる必要があります (例:の使用:日付ではなく時間で) しかし、2 桁の年と日/月、または月/日の配置という永遠の問題に直面することになります。

指定した日付形式は任意のものではないことを知っておく価値があります。これは、組み込みの Date.toString() メソッドの出力です (少なくとも英国と米国のロケールでは)。偶然ではなく、これは Unix の「date」コマンドの形式でもあります (少なくとも Linux では、他の実装も同様だと思います) - 衒学的ですが、Date.toString() は 1 桁の日の数値にゼロを埋め込みます。 UNIX の日付はそうではありません。

これが意味するのは、フォーマットされていない日付をユーザーが変更可能なフィールド (例:HTML INPUT フィールド)を変更せずに受け取ります。したがって、入力がこの形式で入力されるからといって、ユーザーが他の任意の形式を何千も入力することになるわけではありません。

もちろん、まだそうなる可能性はあります。一般に、私が日付入力を処理する方法は、一連の try/catch ブロックを使用して、ある形式に対して試行し、次に別の形式に対して試行し、さらに別の形式に対して試行することです。当社の標準フレームワークには、デフォルトで最大約 20 種類の異なる形式が含まれています。もちろん、まだ完璧ではありません。先日、誰かが日付として「03 Sept」(非標準の月の省略形で年なし)を入力しているのを見つけましたが、私たちはそのシナリオに対応していませんでした。

「Apache Commons」を参照してください。 日付利用時間. 。あります parseDate あなたを必要とするメソッド String を試して吐き出す複数のパターン Date 実例。

他の人が言ったように、パターンは次のように見えます

new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"

任意の形式の日付の解析に関しては、Java でこれを行うライブラリを私は知りません。もしあなたがそのようなものを開発したいと思っているなら、まず Perl を調べることから始めます。 str2time 関数。

もう一つの質問は非常に興味深いと言わざるを得ません。ただし、重大な問題が 1 つあります。これを解析してください。08/07/06!予想される形式のサブセットに限定する場合は、正規表現をいじることで問題を解決できるでしょう。予想されるパターンを大量に構築し、スペースなどで文字列を分割し、部分ごとに一致させることができます。

指定された日付のパターンを求めているだけですか?もしそうなら、これで済むはずだと思います:

"EEE MMM d HH:mm:ss z yyyy"

それとも、書式設定された日付を取得し、その形式を推測して解析しようとしていますか?

どうでしょうか:

EEE MMM dd HH:mm:ss zzz yyyy

文字列を SimpleDateFormat のコンストラクターに渡すだけです。このオブジェクトを使用するには、Date に変換したい文字列を渡す parse メソッドを呼び出すだけです。

以下をご覧ください。

http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

これは実際には同じではありませんが、次のようなものを見てください。 Jクロニック, 、日付に対して自然言語処理を行うことができます。したがって、入力日付は「明日」や「来週の火曜日から 2 週間後」などになります。

これはあなたのアプリケーションにはまったく役に立たないかもしれませんが、それでも役立つかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top