8

Dojo によって RFC822 形式に変換されている JS 日付があります。関数呼び出し - dojo.date.toRfc3339(jsDate) は、次の日付 - 2007-02-26T20:15:00+02:00 を生成します。

上記で生成された日付を解析するために Java 日付 SimpleDateFormat を使用するアプリケーションがあります。タイムゾーンが原因で、この日付形式の解析に問題があります。私は使用しようとしました

yyyy-mm-DD'T'hh:mm:ssZ

タイムゾーンの「Z」は「:」文字を想定していないため、これは失敗します。「:」を使用して RFC822 日付を処理するパターンを指定する方法を知っている人はいますか?

リビジョン:

私がやろうとしていることを正しく解釈してくれてありがとう:)日付がRFC3339で生成されていると言うつもりだったので、RFC822が必要でした。JavaScript をオーバーライドする必要があるようです。日付形式はアプリケーションのSpring Beanに単純に注入されるため、Javaコードを変更せずに日付形式パターンを指定できることを望んでいました。

完全を期すために、(文字列操作/置換を行わずに) シーケンス内の文字を無視するように日付形式式で指定する方法はありますか? この場合、「:」を無視するか、タイムゾーンをすべて一緒に無視すると言いますか?

4

7 に答える 7

4
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {

    public static Date ParseRFC3339DateFormat(String p_date)
    {
        try{
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            String dts = p_date.replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2");
            return formatter.parse(dts);
        }catch (Exception e) {
                return null;
        }
    }
}
于 2012-01-23T13:53:45.903 に答える
3

これは機能します

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-DD'T'hh:mm:ssZ");
format.parse("2007-02-26T20:15:00+02:00".replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2"));

(「Z」書式指定子の後の書式から最後のコロンを削除したことに注意してください。)

于 2010-05-12T23:38:15.160 に答える
2

RFC822 では、日付のタイム ゾーン部分にコロンを使用することはできません。4桁だけが必要です。その Dojo メソッドの名前は、RFC3339 を使用していることを示しています。ISO8601と実質的に同じ形式のようです。そのライブラリを使用できる場合、Joda Timeには ISO8601 と互換性のあるものがあります。ISODateTimeFormatメソッドdateTimeNoMillis()は Dojo 形式と一致しているように見えます。これは、標準の Java の日付と時刻の API よりも優れています。そうでなければ、highlycaffeinated の提案が最適です。

Jamen の更新に対応して更新

Dojo でタイムゾーンを含まない形式を使用する方法はありませんか? 次に、Java 側でフォーマットを調整して一致させることができます。私は Dojo についてよく知りませんし、Dojo が提供する toRfc3339 関数に関するドキュメントを見つけることもできませんでした。

于 2010-05-12T23:43:43.673 に答える
1

タイムゾーンから「:」を取り除き、上記の形式を使用します。

于 2010-05-12T23:28:45.177 に答える