我有一个输入类型为" datetime-local"在jsp页面上,数据被传递给servlet:
String resetTimeString = request.getParameter(RequestParameterName.RESET_TIME);
如何将输入转换为java.sql.Timestamp
?
答案 0 :(得分:1)
编辑: 好吧,我找到了新的东西!
您可以使用Timestamp.valueOf()
格式化值为yyyy-[m]m-[d]d hh:mm:ss[.f...]
的时间字符串
所以它也可以处理微/纳秒。您唯一需要做的就是将 T 替换为空格。
这有效:
String datetimeLocal = "1985-04-12T23:20:50.52";
System.out.println(Timestamp.valueOf(datetimeLocal.replace("T"," ")));
输出:
1985-04-12 23:20:50.52
根据this site您的 resetTimeString 如下所示:' 1985-04-12T23:20:50.52' (一个字符串)
我无法找到直接将其转换为时间戳的方法,但您可以手动将其拆分:
String[] dateTime = datetimeLocal.split("T");
String[] date = dateTime[0].split("-");
String[] time = dateTime[1].split(":");
这将打印:
System.out.println("DateTime: " + Arrays.toString(dateTime));
System.out.println("Date: " + Arrays.toString(date));
System.out.println("Time: " + Arrays.toString(time));
>>> DateTime: [1985-04-12, 23:20:50]
>>> Date: [1985, 04, 12]
>>> Time: [23, 20, 50]
之后你可以创建一个新的时间戳:(不推荐使用!)
Timestamp stamp = new Timestamp(Integer.valueOf(date[0]).intValue() - 1900,
Integer.valueOf(date[1]).intValue(),
Integer.valueOf(date[2]).intValue(),
Integer.valueOf(time[0]).intValue(),
Integer.valueOf(time[1]).intValue(),
Integer.valueOf(time[2].split("\\.")[0]).intValue(),
Integer.valueOf(time[2].split("\\.")[1]).intValue());
请注意,如果您使用此功能,则需要减去1900'从年份开始,用\\.
此外,您需要处理纳秒(在我的示例中,我使用值50.52作为秒,但从服务器返回的字符串可能不包含纳秒)
您还可以计算该日期的长片并使用new Timestamp(<long>)
我希望这会有所帮助:)
答案 1 :(得分:1)
"00"
,则 Cyphrags的回答将无效,因为Chrome在调用java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
时不会发送导致Timestamp.valueOf()
的秒部分。
因此,更完整的答案可能是:
String datetimeLocal = "1985-04-12T23:20";
// make sure the seconds are set before parsing
if (StringUtils.countMatches(datetimelocal, ":") == 1) {
datetimelocal += ":00";
}
Timestamp value = Timestamp.valueOf(datetimeLocal.replace("T", " "));