![](/img/trans.png)
[英]How to properly format unusual date string using Java SimpleDateFormat?
[英]How To properly format Date string from DateTimePicker for parsing by SimpleDateFormat?
我正在使用jQuery DateTimePicker從我創建的JSP
表單中獲取用戶選擇的日期和時間(帶有時區)。 我是Javascript
新手,所以我可能在方法或代碼方面犯了一個錯誤。 因此,如果我願意,請指出來以便我學習。
日期/時間jQuery
選擇器顯示並按預期工作,但是我需要將其數據發送到我創建的Java servlet,然后該Java servlet在該Parse.com數據庫中使用該日期數據創建一個新的Parse Object。 根據Parse的docs ,為對象存儲的Date字段如下:
“日期類型包含一個字段iso,該字段包含一個以ISO 8601格式存儲的UTC時間戳,毫秒精度為:YYYY-MM-DDTHH:MM:SS.MMMZ。”
本質上,我需要重新設置表單返回的日期的格式,以匹配Parse的要求,這將在servlet中使用SimpleDateFormat進行。 (我已經可以使用Java中的Date object
完成此操作,因此另一種解決方案是直接從jsp
中將Date數據作為Date對象發送。如果可能,請告訴我如何做。)
我將SimpleDateFormat的格式與DatePicker格式和TimePicker格式進行了匹配,以便SimpleDateFormat可以解析和重新格式化Date字符串,而不會出現問題,將其轉換為我的Servlet中的Date對象。 (請問誰允許在處理日期和時間時使用多種格式而不是使用一種通用格式... T_T)(也許這是我做錯的部分?有人願意仔細檢查嗎?)所以我更改了格式在我的DateTimePicker
中與SimpleDateFormat匹配,同時保持用戶可讀性:
<script>
$(function() {
$("#timezone_datetimepicker").datetimepicker({
dateFormat: 'mm-dd-yy',
timeFormat: 'HH:mm Z',
onClose: function (dateText) {
$(this).datetimepicker.formatTime('HH:mmZ', dateText);
}
});
});
我在onClose
函數嘗試將格式與SimpleDateFormat的格式精確匹配,然后再將其發送到servlet
。 我基於TimePicker的示例中提到的實用程序功能:
使用實用程序功能格式化自己的時間。 $ .datepicker.formatTime(格式,時間,選項)
$('#utility_example_2').text(
$.datepicker.formatTime('HH:mm z', { hour: 14, minute: 36, timezone: '+2000' }, {})
);
無論我進行了多少嘗試和變化, 這都是失敗的部分,我需要幫助。 當我嘗試使用SimpleDateFormat
解析傳遞的Date字符串時:
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”
當我嘗試將其格式化為與SimpleDateFormat匹配的格式時,為什么仍將其發送到這樣格式化的servlet? 為什么SimpleDateFormat不接受它?
我什至嘗試使用Joda-Time而不是使用SimpleDateFormat來解析日期字符串,但是即使這樣也無法正常工作:
DateTime dt = new DateTime(request.getParameter("sendTime"));
任何幫助或評論將不勝感激。 謝謝。
我已經解決了這個問題,感謝用戶的評論,讓我們先入為主。 我所做的是使用SimpleDateFormat
將日期字符串到達的格式解析為Date object
。 然后,我使用該Date object
構造了一個DateTime
對象( Joda-Time ):
datePicked = formatter1.parse(request.getParameter("sendTime"));
DateTime dt = new DateTime(datePicked);
DateTime
默認為UTC format
和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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.