转换自" datetime-local"到java.sql.Timestamp

时间:2015-01-07 19:57:49

标签: java html timestamp

我有一个输入类型为" datetime-local"在jsp页面上,数据被传递给servlet:

String resetTimeString = request.getParameter(RequestParameterName.RESET_TIME);

如何将输入转换为java.sql.Timestamp

2 个答案:

答案 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", " "));