从「;“本地日期时间”;到java.sql.Timestamp

从「;“本地日期时间”;到java.sql.Timestamp,java,html,timestamp,Java,Html,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..] 因此,它还可以处

我在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..]
因此,它还可以处理微秒/纳秒。您只需将T替换为空格

这项工作:

String datetimeLocal = "1985-04-12T23:20:50.52";
System.out.println(Timestamp.valueOf(datetimeLocal.replace("T"," ")));
输出:

1985-04-12 23:20:50.52

根据您的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]
之后,您可以创建一个新的时间戳:(这是不推荐的!)

请注意,如果使用此选项,则需要从年份中减去“1900”,并用
\\\\.

此外,您还需要处理纳秒(在我的示例中,我使用值50.52作为秒,但是从服务器返回的字符串可能不包含纳秒)

您还可以计算从日期算起的长时间,并使用
newtimestamp()


我希望这有帮助:)

如果秒设置为
“00”
,Cyphrags的答案将不起作用,因为Chrome不会发送秒部分,从而导致
java.lang.IllegalArgumentException:调用
Timestamp.valueOf()
时,时间戳格式必须是yyyy-mm-dd hh:mm:ss[.fffffffffff]

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

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

我希望能有另一种更方便的方法来做这件事。不过还是要谢谢你:)看看我帖子的顶部。。。我认为这将帮助你更好:)变种真的更好。谢谢欢迎来到SO!我冒昧地删除了你的序言,因为它可能会让人觉得你的序言不是一个实际的答案(因此导致删除),而我认为它是。请随意拒绝/编辑不同的内容
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", " "));