Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将日期对象以HH:MM格式存储到MySql中?_Java_Datetime - Fatal编程技术网

Java 如何将日期对象以HH:MM格式存储到MySql中?

Java 如何将日期对象以HH:MM格式存储到MySql中?,java,datetime,Java,Datetime,我试图从字符串示例13:30(HH:MM)创建一个日期对象(格式:HH:MM)。我想在MySql表中保存HH:MM,但是下面的代码在列中输入了一些随机值(例如:“6828-00-00:00”)。如何在Mysql中以HH:MM格式存储日期值 Date date = null; String afternoon = "13" +":" +"30"; String time = afternoon; try { date = new

我试图从字符串示例13:30(HH:MM)创建一个日期对象(格式:HH:MM)。我想在MySql表中保存HH:MM,但是下面的代码在列中输入了一些随机值(例如:“6828-00-00:00”)。如何在Mysql中以HH:MM格式存储日期值

Date date = null; 
String afternoon = "13" +":" +"30";
String time = afternoon;


try {                               
 date = new SimpleDateFormat("HH:mm").parse(time);
}
catch (ParseException e) {
    e.printStackTrace();
}

long d = date.getTime();
java.sql.Date sqlDate = new java.sql.Date(d);

 String sql3 = "CREATE TABLE IF NOT EXISTS DateTime"+
                       "(UniqueBusID VARCHAR(255) not NULL, " +
                       " Timenings DATETIME DEFAULT NULL ,"+
                       " PRIMARY KEY ( UniqueBusID ))";

stmt.executeUpdate(sql3);
stmt.executeUpdate("INSERT INTO DateTime " + "VALUES ('Test3','"+sqlDate.getTime()+"')");

我很惊讶它插入了“6828-00-00:00:00”:)

这里有四个问题

[1] 首先,当您设置SimpleDataFormat时,您正在创建一个java对象日期。Java日期从1970年1月1日开始,因此如果只设置小时和分钟,格式化程序将假定所有其他字段为零(而不是今天),因此

[2] 但是,您调用了getTime()方法,该方法返回1970年1月1日以来的毫秒数

System.out.println(new SimpleDateFormat("HH:mm").parse("13:30").getTime()); //59400000
[3] 然后,您尝试将这个数字推送到MySQL中。MySQL datetime需要以下格式的字符串

YYYY-MM-DD HH:MM:SS 
(见附件)

因为MySQL是一个非常仁慈的数据库;-)它试图将59400000转换成这种格式,显然

mysql>插入d值(59400000); 查询正常,1行受影响(0.04秒)

[4] 当然,您可以将SimpleDataFormat调整为MySQL预期的日期格式,但是您在插入查询中连接字符串,出于安全原因,这不是一个好主意,也不是一个有效的方法。相反,您应该使用PreparedStatement并设置日期对象(而不是毫秒)

EDIT 您必须使用
java.sql.Timestamp
而不是
java.sql.Date
。从javadoc开始

为了符合SQL日期的定义,必须通过将实例关联的特定时区中的小时、分钟、秒和毫秒设置为零来“规范化”java.SQL.DATE实例包装的毫秒值

所以只要换一条线就行了

java.sql.Date sqlDate = new java.sql.Date(d);


您做得很好,除了您用来将
字符串
解析为
日期
的模式,即
HH:mm
,这是错误的

正确格式:
H:mm
H
:0-23;
H
:1-12)


以下是

的参考,我实际上想在我的表上运行一个查询,例如Select*from xyz,其中datetime介于13:00到18:00之间。。如果我将列数据类型设置为VarChar,那么如何处理字符串对象呢?在提交第一个设计和解决方案之前,也许您想了解一些陷阱。这是一个很好的例子。您当然应该使用带参数的PreparedStatement,而不是像那样构造SQL。尝试过这样做,但仍然会在中插入6828-00-00:00:00MySql@user3157309请参见上面的编辑
mysql> select * from d;
+---------------------+
| y                   |
+---------------------+
| 5940-00-00 00:00:00 |
+---------------------+
1 row in set (0.08 sec)
java.sql.Date sqlDate = new java.sql.Date(d);
java.sql.Timestamp sqlTime = new Timestamp(d);
try {                               
 date = new SimpleDateFormat("H:mm").parse(time);
}