2008-09-04 9 views
5

私は、日付の表現を含む文字列を持っています。私はのSimpleDateFormatを使用してDateオブジェクトを作成し、2つの問題を持ってしようとしている文字列に格納された日付からプログラムをどのようにして作成しますか?

木11月30日午前19時00分00秒EST 2006

:ように見えます。

1)私は、パターンを決定するためのAPIを使用して文字列を解析でき方法を見つけることができません)SimpleDateFormatのコンストラクタ

2にハードコードにソリューションをパターンを把握することはできませんだから私はこれをさまざまなパターンの日付出力に再利用することができます

誰かがAPIまたはカスタムソリューションを使って解決策を知っていれば、私は大いに感謝します。

+0

、例えば[ 'java.util.Date'(https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)などの煩雑古い日時クラス、['java.util.Calendar'](https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html)、' java.text.SimpleTextFormat'は今や[従来のものです](https://en.wikipedia.org/wiki/Legacy_system)の代わりに、[java.time](https://docs.oracle.com/javase/8/docs/api/java/time/package- summary.html)クラス。 [Tutorial by Oracle](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)を参照してください。 –

答えて

7

フォーマットはあなたの2番目の質問についてはhttp://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.html

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

を見上げことができ、私は日付フォーマットを把握し、中に知らなくても、それを解析するために、任意のJavaライブラリを知りません形式が何であるかを進めてください。他の人が言ったように、それは、任意の形式の日付を解析するためとして

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

をする必要がありますように

2

私は日付を解析し、そのパターンを仕事にする簡単な方法がありますわからないんだけど、私はあなたが投稿いずれかのパターンがあることだろうと思っているだろう:

EEE MMMはHHをddは:MM: ss zzz yyyy

+0

ありがとう!そのパターンがうまくいけば、Googleを使って見つけることができた最高のものはParseExceptionを投げていた "ddd MMM dd hh:mm:ss 'EST' yyyy"でした。うまくいけば、プログラムでパターンを決定する方法もあります。 – Aaron

0

あなたはその日付のパターンを求めていますか?もしそうなら、私は、これはそれを行うべきだと思う:

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

それとも、任意の形式の日付を取り、フォーマットを推測し、それを解析しようとしていますか? SimpleDateFormatに渡す

1

は、パターンが見え、私はJavaでこれを行う任意のライブラリを認識していませんよ。あなたがそのようなことを開発したいと思っていたなら、私はperl str2timeの機能から見ていきます。

EEE MMM dd HH:mm:ss zzz yyyy

だけのSimpleDateFormatのコンストラクタに文字列を渡す:についてどのように

0

。オブジェクトを使用するには、Dateに変換する文字列を渡すparseメソッドを呼び出します。

あなたは見てみることができます:あなたはパターンそのものを処理するためにずっとそこにありません日付を解析したり、フォーマット以外の何かをしたい場合は

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

2

。以前は、書式設定されたテキストフィールドに日付を入力するためのSwingコンポーネントを作成していました。パターンを指定し、そのパターンの要素にテキスト入力カーソルを移動し、有効な値のみを許可します。

その一部として、私はDateFormatParser available here as part of the OpenHarmonise open source projectを書きました。パターンに日付を解析

が取り組むために、非常に興味深い問題だろう。特定の前提条件(たとえば、日付を使用しないで時間を使用するなど)を行う必要がありますが、2桁の年月日または月/日の構成の永遠の問題に直面します。

0

これは実際には同じではありませんが、日付に自然言語処理を行うことができますJChronic、のようなものを見たいかもしれません。したがって、入力日は「明日」、「次の火曜日から2週間」などのようになります。

これは、お使いのアプリケーションでは役に立たないかもしれませんが、やはりそうかもしれません。

1

私は他の質問が非常に興味深いと言う必要があります。 1つの重大な問題がありますが、これを解析してください:08/07/06!予想されるフォーマットのサブセットに制限されている場合は、正規表現を使って遊んで問題を解決したり、期待されるパターンを集めたり、スペースやその他の文字列を壊したり、パートごとに一致させることができます。

+0

私は確かにあいまいさがあることに同意します - これは日付に関する最も一般的な問題です。しかし、1つの解決策は、あいまいな日付に遭遇した場合に、プログラム方法にmm-dd-yyのようなデフォルトパターンを引き渡すことです。そのパラメータにデフォルト(null)を指定しないと、例外がスローされるなどして失敗する可能性があります。これは完璧な解決策ではありませんが、ほとんどの状況で使用するのに十分です。 – Aaron

2

あなたが指定した日付形式は任意ではありません。これは組み込みのDate.toString()メソッドの出力です(少なくとも英国と米国のロケールでは)。偶然ではなく、unixのdateコマンドのフォーマットでもあります(少なくともlinuxでは、他の実装も信じています)。ペイトンであるにもかかわらずDate.toString()は1桁の日数をゼロUnixの日付はありません。

これは、ユーザーが変更可能なフィールド(HTML INPUTフィールドなど)に書式設定されていない日付を出力し、未変更のデータを受け取った場合に、この入力形式を受け取る可能性があることを意味します。入力がこの形式で行われているからといって、ユーザーが何千もの任意の形式で入力するわけではありません。

もちろん、まだあります。私が一般的に日付入力を処理する方法は、一連のtry/catchブロックを使用して、あるフォーマットに対して、次に別のフォーマットへ、次に別のフォーマットに対して試みます。私たちの標準的なフレームワークは、デフォルトで最大約20の異なるフォーマットになっています。もちろんそれはまだ完全ではありません。先日、誰かが "03 Sept"を日付(非標準の月の略語、年はありません)と入力し、私たちはそのシナリオを処理していませんでした。

2

を参照してくださいApacheのコモンズのDateUtils。あなたのStringと複数のパターンを使ってDateインスタンスを試してみるparseDateメソッドがあります。

3

POJava日パーサーorg.pojava.datetime.DateTimeは複数の言語、タイムゾーン、およびフォーマットをサポートして不変、かつ堅牢なパーサです。

すべてのベスト、パーサはヒューリスティックで、動作するように既存の「フォーマット」を必要としません。あなたはそれに日付/日付時のテキスト文字列を渡し、java.util.Dateを取得するだけです! FYI

関連する問題