0

奇妙な問題があります。次のような日付文字列を解析する必要があります1997-02-14T00:00:00.0000000+05:30。日付文字列の奇妙な点は、タイム ゾーン情報です。+05:30いつもの代わりです+0530

yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZTZ 情報がなければ、魅力的に機能する基本的な書式文字列を用意しました。

誰でもこの問題の解決策を提案できますか? そのような TZ 情報を処理できるフォーマット文字列はありますか?

前もって感謝します。

4

7 に答える 7

5

私は数ヶ月前にこの問題を自分で調べました。私の記憶が正しければ、SimpleDateFormat は他のタイムゾーン形式を受け入れるほど柔軟ではありません (私の場合は +530 でした)。私が行ったことは単純な前処理ステップでした。つまり、文字列を SimpleDateFormat に渡す前にコロンを削除しようとしました。

于 2009-10-12T14:21:37.493 に答える
3

正規表現で前処理してタイムゾーンを置き換えることはできませんか

String dateAndTime = ...
String preprocessed = dateAndTime.replace("([+-])(\\d\\d):(\\d\\d)$", "$1$2$3");
// Go on with your life 
于 2009-10-12T14:23:21.733 に答える
2

SimpleDateFormat はこれを受け入れる必要があります。ドキュメントから:

解析には、一般的なタイム ゾーンも使用できます。

これらは次のように指定されます

GMTOffsetTimeZone:
             GMT Sign Hours : Minutes

あなたが持っているもののように見えますか?

それが失敗した場合、Joda DateTimeFormatはこれを行うと主張します。さまざまな理由 (より一貫性がありシンプルな API、フォーマッター/パーサーのスレッドセーフなど) から、関係なく Joda を使用したくなるでしょう。

于 2009-10-12T14:21:15.653 に答える
2

これはたまたま XML ファイル (ISO8601 形式) からの日付文字列ですか? 残念ながら、適切に処理する方法がないSimpleDateFormatタイムゾーン部分の「:」が原因で、これを で解析する (簡単な) 方法はありません。SimpleDateFormat

XML日時文字列を解析する方法に関するこの他の質問の私の回答を見てください。

于 2009-10-12T14:22:14.263 に答える
2

もちろん、String を前処理するハックは常にあります。

誰もより良い答えを見つけられない場合、それはすでに何かです. ハックを説明するコメントを付けて、メソッドにカプセル化できます。

于 2009-10-12T14:22:24.747 に答える
0

まだ端が荒いですが、うまくいくはずです:

http://pastebin.com/f7bbb0b43

于 2009-10-12T15:21:27.187 に答える
0

forのreplaceAllメソッドを使用する必要があると思います。Stringregular expression

String dateAndTime = ...
String preprocessed = dateAndTime.replaceAll("(GMT)([+-])(\\d\\d):(\\d\\d)", "$2$3$4");
于 2010-09-15T08:08:30.167 に答える