2011-05-15 57 views
3

我在java中有一个日期格式,我需要在MySQL中保存为时间格式。有没有办法从日期获得时间部分?我知道Dat.gettime()返回一个长,但我只需要在MySQLJava日期 - >到MySql时间

任何建议...

THX所有的时间..

+0

http://stackoverflow.com/q/2400955/248903 – Ascherer 2011-05-15 11:28:14

回答

3

一起使用PreparedStatement与您java.util.Date创建java.sql.Time对象应该工作:

java.util.Date myDate = .... 
java.sql.Time theTime = new java.sql.Time(myDate.getTime()); 
PreparedStatement pstmt = ... 
pstmt.setTime(1, theTime); 
+0

正确的答案,但需要注意几个问题:(A)这将产生一个时间的日在[UTC](https://开头的连接。 wikipedia.org/wiki/Coordinated_Universal_Time)而不是[特定时区](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones),这可能是也可能不是你想要的。 (B)['java.sql.Time'](http://docs.oracle.com/javase/8/docs/api/java/sql/Time.html)类现在是遗留的,代之以['' java.time.LocalTime'](https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html)自[JDBC 4.2]开始的类(https://jcp.org/ aboutJava/communityprocess/mrel/jsr221/index2.html)和更高版本。 – 2017-09-02 19:06:33

0

使用java.sql.Date建设SQL日期。

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

你可以使用的SimpleDateFormat格式化您的日期时间字段:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
String time = sdf.format ( yourDate ); 
0

根据在JDBC驱动程序上,它可以省略日期的时间部分,最好使用java.sql.Timestamp。

java.sql.Timestamp mysqlDate = new java.sql.Timestamp(javaDate.getTime()); 
0

获取日期+ Mysql的时间

ResultSet rs=....; 

Date tg = new Date(rs.getTimestamp("column datetime").getTime()); 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm aaa"); 

String val = sdf.format(tg); 
0

当与数据库进行数据交换,使用适当的日期类型和对象。不要使用单纯的字符串或整数而不是合法的类型/类。

java.time

现代的方法使用java.time类。使用符合JDBC 4.2或更高版本的JDBC driver,您可以省略使用java.sql.Time类,并直接使用java.time.LocalTime

传统类java.util.Date表示UTC中的日期和时间。转换为现代java.time类(Instant),指定要查看该值的时区,并提取时间。

要转换,请调用添加到旧旧类的新方法。

Instant instant = myJavaUtilDate.toInstant() ; 

指定时区。

该时区为至关重要。对于任何特定的时刻,日期因地区而异。例如,Paris France午夜后几分钟是新的一天,而在Montréal Québec仍然是“昨天”。

continent/region的格式指定一个proper time zone name,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4字母缩写,如ESTIST,因为它们是而不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of("America/Montreal") ; // Or "Asia/Kolkata", or "Pacific/Auckland", etc. 
ZonedDateTime zdt = instant.atZone(z) ; 

提取没有日期的时间。

LocalTime lt = zdt.toLocalTime() ; 

传递到您的PreparedStatement致电setObject

String sql = "INSERT INTO tbl_ (time_of_day_) VALUES (?) ; " ; 
PreparedStatement ps = conn.prepareStatement(sql) ; 
ps.setObject(1 , lt) ; // Call `setObject` to pass a java.time object directly without converting into `java.sql.*` type. 
int rows = ps.executeUpdate() ; 

以类似的方式获取数据,调用ResultSet::getObject

LocalTime lt = myResultSet.getObject(… , LocalTime.class) ;