从 "datetime-local" 到 java.sql.Timestamp 的转换

Conversion from "datetime-local" to java.sql.Timestamp

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

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

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

编辑: 嗯,我发现了一些新东西!

您可以使用 Timestamp.valueOf() 来格式化值为 yyyy-[m]m-[d]d hh:mm:ss[.f...] 的时间字符串 所以它也可以处理 micro/nano 秒。您唯一需要做的就是用 space 替换 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>)

希望对您有所帮助:)

如果秒设置为 "00",Cyphrags 的回答将不起作用,因为 Chrome 不会发送秒部分,从而在调用 [=13= 时导致 java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff] ].

因此,更完整的答案可能是:

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