我正在尝试用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部分有没有更好的解决方案?
答案 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