Javascript Date-String GMT到Java Date

时间:2012-10-16 05:29:58

标签: java javascript date jersey

我正在尝试用Jersey编写REST-API。从javascript我得到一个Datestring,如:

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

(那是什么

new Date().toString()

确实如此,但这不在我的范围内。)

可以通过实现自己的@ContextResolver来解析此日期字符串。我一直在谷歌搜索大约一天,我可以放在一起的最好的SimpleDateFormat是:

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

但是你可以看到'GMT'部分和括号是“硬编码”。没有更改javascript部分有没有更好的解决方案?

2 个答案:

答案 0 :(得分:0)

您可以尝试toLocaleDateString()

答案 1 :(得分:0)

@kidmenot:感谢您的链接,但该解决方案需要在Java端“手动”处理javascript-date并更改Javascript端。所以最后我们只需要更改javascript-part。有

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

遍布js-code。所以只需将其更改为

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

解决了这个问题,因为后来就是

JSON.stringify()

在将其发送到服务器之前。 JSON.stringify()调用 myDate.toJSON(),它返回一个ISO-8601日期字符串,由Jersey处理,无需任何进一步的编码。

因此,我们选择此解决方案以避免将来出现并发症。

半年后编辑:

这个解析问题经常发生,并且由于某些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]);       
}

如果您有更好的解决方案,请在此处发布。 THX