MySQL中timestamp、datetime对应的Java类型封装

MySQL中timestamp、datetime对应的Java类型封装

  1. 先说结论

    • 使用Timestamp类(java.sql.Timestamp)来封装
  2. 原因

    1. 存储长度

      • MySQL的timestamp、datetime

        日期类型        日期格式                			日期范围
        datetime     YYYY-MM-DD HH:MM:SS.[fff...]    1000-01-01 00:00:00~9999-12-31 23:59:59
        timestamp    YYYY-MM-DD HH:MM:SS.[fff...]    1970-01-01 00:00:00~9999-12-31 23:59:59
        
      • java中Date、Timestamp

        日期类型        日期格式                			日期范围
        Timestamp    YYYY-MM-DD HH:MM:SS.[fff...]    1970-01-01 00:00:00~9999-12-31 23:59:59
        Date         YYYY-MM-DD                      1970-01-01~9999-12-31
        
        • Date类官方文档:https://docs.oracle.com/javase/8/docs/api/java/sql/Date.html

          To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.[为了符合 SQL 的定义,实例DATE包装的毫秒值java.sql.Date必须通过在实例关联的特定时区中将小时、分钟、秒和毫秒设置为零来“规范化”]

          故,即使原时间戳时分秒有值,通过 Date类型封装进行显示,都会变为0

  3. 所以,即使Java的Timestamp还是存在无法覆盖MySQL的datetime类型的地方,但已经是最优解了

  4. Java获取当前时间戳保存至数据库操作时,可用以下代码获取并封装传参

    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    
posted @ 2021-09-10 15:40  Jancy丶  阅读(14221)  评论(0编辑  收藏  举报