【问题标题】:Java Date -> to MySql TimeJava 日期 -> 到 MySql 时间
【发布时间】:2011-08-25 20:53:05
【问题描述】:

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

任何建议...

谢谢大家..

【问题讨论】:

标签: java mysql jdbc


【解决方案1】:

将 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);

【讨论】:

【解决方案2】:

使用 java.sql.Date 构建 SQL Date。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        获取日期+时间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);
        

        【讨论】:

          【解决方案6】:

          与数据库交换数据时,请使用适当的日期类型和对象。不要仅使用字符串或整数来代替合法的类型/类。

          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/CasablancaPacific/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() ;
          

          通过调用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 ) ;
          

          【讨论】:

            猜你喜欢
            • 2011-03-01
            • 2011-03-29
            • 1970-01-01
            • 1970-01-01
            • 2015-02-12
            • 1970-01-01
            • 2015-09-03
            • 2019-01-13
            • 2011-04-15
            相关资源
            最近更新 更多