Java 如何正确格式化DateTimePicker中的日期字符串,以便通过SimpleDataFormat进行解析?
我使用从我创建的Java 如何正确格式化DateTimePicker中的日期字符串,以便通过SimpleDataFormat进行解析?,java,jquery,jsp,parse-platform,datetimepicker,Java,Jquery,Jsp,Parse Platform,Datetimepicker,我使用从我创建的JSP表单中获取用户选择的日期和时间(带时区)。我不熟悉Javascript,所以我的方法或代码可能会出错。因此,如果我是,请指出,这样我可以学习 日期/时间jQuery选择器按预期显示和工作,但是我需要将其数据发送到我创建的Java servlet,然后该servlet使用该日期数据在Parse.com数据库中创建一个新的Parse对象。根据,为对象存储的日期字段如下所示: “日期类型包含包含UTC时间戳的iso字段 以ISO 8601格式存储,精度为毫秒: YYYY-MM-D
JSP
表单中获取用户选择的日期和时间(带时区)。我不熟悉Javascript
,所以我的方法或代码可能会出错。因此,如果我是,请指出,这样我可以学习
日期/时间jQuery
选择器按预期显示和工作,但是我需要将其数据发送到我创建的Java servlet,然后该servlet使用该日期数据在Parse.com数据库中创建一个新的Parse对象。根据,为对象存储的日期字段如下所示:
“日期类型包含包含UTC时间戳的iso字段
以ISO 8601格式存储,精度为毫秒:
YYYY-MM-DDTHH:MM:SS.MMMZ。“
本质上,我需要重新格式化表单返回的日期,以符合Parse的要求,这将在servlet中使用SimpleDataFormat来完成。(我已经能够用Java中的日期对象
实现这一点,因此另一种解决方案是直接从jsp
发送日期数据作为日期对象。如果可能,请告诉我如何实现。)
我将和匹配起来,这样SimpleDataFormat就能够毫无问题地将日期字符串解析和重新格式化为servlet中的日期对象。(诅咒在处理日期和时间时允许使用如此多种格式而不是使用一种通用格式的人…T_T)(也许这是我做错的部分?有人愿意再次检查吗?)
因此,我更改了我的DateTimePicker
中的格式,以与SimpleDataFormat匹配,同时保留用户可读性:
<script>
$(function() {
$("#timezone_datetimepicker").datetimepicker({
dateFormat: 'mm-dd-yy',
timeFormat: 'HH:mm Z',
onClose: function (dateText) {
$(this).datetimepicker.formatTime('HH:mmZ', dateText);
}
});
});
))
不管我做了多少尝试和改变,这是失败的部分,我需要帮助。当我试图用SimpleDataFormat
解析传递的日期字符串时:
SimpleDateFormat formatter1 = new SimpleDateFormat("MM-dd-yyyy HH:mm z");
SimpleDateFormat formatter2 = new SimpleDateFormat("MM-dd-yyyy'T'HH:mmz");
try {
//datePicked and datePickedFormatted are global Date variables
datePicked = formatter1.parse(request.getParameter("sendTime"));
datePickedFormatted = formatter2.parse(datePicked.toString());
} catch (ParseException e1) {
System.out.println("Date formatter failed to parse chosen sendTime.");
e1.printStackTrace();
}
我在日志中发现此错误:
java.text.ParseException:无法解析的日期:“08-22-2014 05:18-04:00”
当我试图将其格式化为与SimpleDataFormat的格式相匹配时,为什么它仍然被发送到这样的servlet格式?为什么SimpleDateFormat不接受它
我甚至尝试用解析日期字符串,而不是使用SimpleDataFormat,但即使这样也不起作用:
DateTime dt = new DateTime(request.getParameter("sendTime"));
如有任何帮助或意见,将不胜感激。谢谢。由于用户的评论,我已经解决了这个问题,领先一步。我所做的是使用
SimpleDateFormat
将日期字符串的格式解析为date对象
。然后,我用该Date对象构建了一个DateTime
对象():
datePicked = formatter1.parse(request.getParameter("sendTime"));
DateTime dt = new DateTime(datePicked);
DateTime
默认为UTC格式
和ISO-8601
,因此Parse.com的数据库可以毫无问题地接受它的.toString()
方法。这是最终有效的代码:
SimpleDateFormat formatter1 = new SimpleDateFormat("MM-dd-yyyy HH:mm X");
try {
datePicked = formatter1.parse(request.getParameter("sendTime"));
System.out.println("Retrieved and formatted dateTime: " + datePicked.toString());
} catch (ParseException e1) {
System.out.println("Date formatter failed to parse chosen sendTime.");
e1.printStackTrace();
}
DateTime dt = new DateTime(datePicked);
你试过用大写字母“Z”代替小写字母“Z”吗?或者猜测它甚至应该是“X”大写字母“Z”以同样的方式失败,当我使用“X”时,它传递第一个SimpleDataFormat
formatter,因此它接受表单中的日期字符串。但是,第二个格式化程序失败,改为使用以下日期:java.text.ParseException:不可解析日期:“2014年8月22日星期五04:28:00 EDT”
。我需要以第二个格式化程序的格式将其存储在Parse.com数据库中。为什么在模式中没有?我认为这是一个例外。在第二个格式化程序“EEE MMM d HH:mm:ss z yyyy”中使用它@sandris Parse似乎需要它-没有它,Parse的服务器会拒绝它。请参阅我过去问过的一个问题的答案:。
SimpleDateFormat formatter1 = new SimpleDateFormat("MM-dd-yyyy HH:mm X");
try {
datePicked = formatter1.parse(request.getParameter("sendTime"));
System.out.println("Retrieved and formatted dateTime: " + datePicked.toString());
} catch (ParseException e1) {
System.out.println("Date formatter failed to parse chosen sendTime.");
e1.printStackTrace();
}
DateTime dt = new DateTime(datePicked);