2

私はずっと検索してきましたが、これが起こっている理由や理由を見つけることができませんが、 DateFormat の parse(String) メソッドは私の文字列を正しく解析していません.

HTTPヘッダーに使用される日付形式に文字列を解析しようとしていますが、次のように文字列を独自に取得することまでできました。

Thu, 11 Nov 2010 18:34:22 GMT

形式は次のとおりです。

E, d MMM yyyy HH:mm:ss z

しかし、これを使用するdf.parse(dateStr);と、次のようになります。

Thu Nov 11 18:34:22 GMT 2010

これは私が望んでいたものとはまったく異なります。なぜ今が GMT の後の年なのですか? コンマがなくなったのはなぜですか?そして、なぜ月の後の日付ですか?

私は今これについて完全に混乱しており、解決策を見つけることができませんが、日付をその形式にする必要があります。コンマは物事を台無しにしていますか?またはコロン?

御時間ありがとうございます、

インフィニティフィズ

PS

これについて言及するのを忘れていましたが、dateformat.setLenient(false) を試してみましたが、違いはありません。

PPS

日付を date1.before(date2) および after() などと比較して、一方が他方よりも新しいかどうかを確認するためにこれを実行しようとしていますが、解析が機能していないため、これを行うことはできません。

それらは同じように見えますが、形式だけが異なりますが、両方で getTime() を呼び出した後 (2 つの同一の日付を指定した場合)、long が同じではないため、同じではありません。日付のように:

2010 年 11 月 11 日木曜日 19:38:52 GMT ファイルの lastModified()

文字列「Thu, 11 Nov 2010 19:38:52 GMT」を入力し、parse() を使用して文字列を日付に変換し、その日付で getTime() を呼び出して long を比較すると、次のようになります。

lastModified = 1289504332671 fromString = 1289504332000

違うのは下3桁だけですが、何か意味はありますか?

お時間をいただきありがとうございました

インフィニティフィズ

4

1 に答える 1

8

Date#toString()結果の形式は、 (javadoc を参照するにはリンクをクリックしてください)のデフォルト形式です。あなたはどうやらSystem.out.println(date). 代わりに別のパターンを使用SimpleDateFormat#format()して、目的の形式にフォーマットしたいと考えています。例えば

String newDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

更新: を使用する場合は、形式を気にする必要はありませんDateDateがとして変換 (表示) される時点での形式のみを気にする必要がありますString。タイムスタンプの違いについては、 はタイムスタンプにDateミリ秒精度を使用しますが、HTTP ヘッダーは秒精度を使用します。比較する前に、タイムスタンプを 1000 で割りたいとします。

于 2010-11-12T17:42:52.503 に答える