0

ジャージーでREST-APIを作成しようとしています。javascriptから、次のような日付文字列を取得します。

Tue Oct 16 2012 07:10:55 GMT+0200 (CEST)

(それが

new Date().toString()

ありますが、これは私の範囲ではありません。)

この日付文字列は、独自の@ContextResolverを実装することで解析できます。私は約1日グーグルしていて、まとめることができる最高のSimpleDateFormatは次のとおりです。

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'z '('z')'", Locale.ROOT);

しかし、ご覧のとおり、「GMT」部分と角かっこは「ハードコーディング」されています。javascriptの部分を変更せずにもっと良い解決策はありますか?

4

2 に答える 2

0

toLocaleDateString()を試すことができます

于 2012-10-16T05:38:48.693 に答える
0

@kidmenot: リンクありがとうございます。ただし、その解決策では、Java 側で javascript-date を「手動で」処理し、Javascript 側を変更する必要があります。最後に、javascript 部分のみを変更する必要がありました。ありました

var myDate = new Date():
// ... many LOCs
var myDateString = "" + myDate + "";

jsコード全体に散らばっています。それを次のように変更するだけです

var myDate = new Date():
// ... many LOCs
var myDateString = myDate;

後で問題があったため、問題を解決しました

JSON.stringify()

サーバーに送信する直前。そのJSON.stringify()はmyDate.toJSON()を呼び出します。これは、それ以上のコーディングを必要とせずに Jersey によって処理される ISO-8601 日付文字列を返します。

そのため、将来の複雑化を避けるためにこのソリューションを選択しました。

半年後に編集:

この解析の問題は頻繁に発生し、一部の js フレームワークのために最終的に避けられなくなりました。以下は、Java ソリューションです。

public static Date jsDateStringToJavaDate(String jsDateString) throws ParseException{

    String[] arrStrDateParts = jsDateString.split(" ");
    SimpleDateFormat sdf = new SimpleDateFormat("E MMM dd yyyy HH:mm:ss", Locale.ENGLISH);
    sdf.setTimeZone(TimeZone.getTimeZone(arrStrDateParts[5].substring(0,6)+":"+arrStrDateParts[5].substring(6)));
    return sdf.parse(arrStrDateParts[0]+" "+arrStrDateParts[1]+" "+arrStrDateParts[2]+" "+arrStrDateParts[3]+" "+arrStrDateParts[4]);       
}

より良い解決策があれば、ここに投稿してください。どうも

于 2012-12-10T17:54:09.567 に答える