【发布时间】:2011-08-25 20:53:05
【问题描述】:
我在 java 中有一个日期格式,我需要在 MySQL 中保存为时间格式。有没有办法从日期中获取时间部分?我知道 Dat.gettime() 返回 long 但我只需要 MySql 中的时间
任何建议...
谢谢大家..
【问题讨论】:
我在 java 中有一个日期格式,我需要在 MySQL 中保存为时间格式。有没有办法从日期中获取时间部分?我知道 Dat.gettime() 返回 long 但我只需要 MySql 中的时间
任何建议...
谢谢大家..
【问题讨论】:
将 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);
【讨论】:
java.sql.Time 类现在是遗留的,被 java.time.LocalTime 类从 JDBC 4.2 和更高版本取代。
使用 java.sql.Date 构建 SQL Date。
long d = date.getTime();
java.sql.Date sqlDate = new java.sql.Date(d);
【讨论】:
您可以使用 SimpleDateFormat 来格式化日期的时间字段:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss" );
String time = sdf.format ( yourDate );
【讨论】:
根据 JDBC 驱动,它可以省略日期的时间部分,最好使用 java.sql.Timestamp。
java.sql.Timestamp mysqlDate = new java.sql.Timestamp( javaDate.getTime() );
【讨论】:
获取日期+时间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);
【讨论】:
与数据库交换数据时,请使用适当的日期类型和对象。不要仅使用字符串或整数来代替合法的类型/类。
现代方法使用 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/Montreal、Africa/Casablanca 或Pacific/Auckland。切勿使用 3-4 个字母的缩写,例如 EST 或 IST,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ; // Or "Asia/Kolkata", or "Pacific/Auckland", etc.
ZonedDateTime zdt = instant.atZone( z ) ;
提取不带日期的时间。
LocalTime lt = zdt.toLocalTime() ;
通过调用setObject 传递到您的PreparedStatement。
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 ) ;
【讨论】: