我收到此错误:
java.lang.IllegalArgumentException:时间戳格式必须为yyyy-mm-dd hh:mm:ss [.fffffffff]
这是我的java代码:
<% int reg;
String sdate = request.getParameter("sdate");
//Timestamp ts=request.get
//out.println(sdate);
String text = "0000-00-00 00:00:00";
Timestamp ts = Timestamp.valueOf(text);
// Timestamp ts1=Timestamp.valueOf(sdate);
// Timestamp ts2=Timestamp.valueOf(edate);
try{
String s;
Format formatter;
Date date = new Date(sdate);
//out.println(date);
formatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
s = formatter.format(date);
out.println(s);
PreparedStatement ps=cn.prepareStatement("insert into c1 values(?)");
// ps.setString(1,ts);
ps.setTimestamp(1,ts);
int i=ps.executeUpdate();
if(i==1)
{
pw.println("record inserted");
}
else
{
pw.println("not iNSERTED");
}
//cn.close();
}
catch(Exception e)
{
out.println(e.toString());
}
%>
有什么建议吗?
答案 0 :(得分:3)
此
String text = "0000-00-00 00:00:00";
不是有效日期。没有月份或日期的值为0
。
Timestamp.valueOf(text)
将无法解析它。
至少使用
String text = "0000-01-01 00:00:00";
答案 1 :(得分:2)
Shakti,你需要解决这个错误。 java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
然后看看你格式化日期的方式。 您需要更改下面的行
formatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
为:
formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
注意日期中的hypen字符的区别和用法,而不是你正在使用的冒号字符。
更新1
确定。所以在@sotirios的评论之后,我决定做一些额外的研究,然后我遇到this post并学到了一些东西。你不能给出0000-00 ...日期配置,因为MySQL [使用“零日期”作为特殊占位符
简单明了的解决方案是从
更改日期字符串String text = "0000-00-00 00:00:00";
至少
String text = "0001-01-01 00:00:00";
如果你真的想发送0000-00 -...日期字符串,我相信解决方案是指定“zeroDateTimeBehavior = convertToNull”作为MySQL连接的参数(在数据源URL中或作为附加财产),例如:
jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull
这将导致所有此类值都以NULL形式发送。
答案 2 :(得分:0)
我使用jdbc的本机时间戳类型:
Date date = myobject.getDate();
cstmt = conn.prepareCall("{call dbo.myproc(?)}");
cstmt.setTimestamp("date", new Timestamp(date.getTime())
cstmt.execute();