Java时间类型以及前端和数据端的传输

1. Java时间类型

  1. Date

    • Date类是一般我们用的比较多的一个类,而Date类其实不止一个包有,即有很多包的子类都有Date类,如下图所示

    在这里插入图片描述

    • 虽然sql也有一个Date类,但其实相对而言,用的更多的是util包下的Date,所以也就以util包下的Date为例

    • 构造方法

      • Date():获取当前系统的的时间

      • Date(Long millisec):获取传入的时间戳(毫秒数)的时间

        (时间戳是 1970 年 1 月 1 日(00:00:00 )至当前时间的总秒数;)

           		Date date = new Date();
            	  System.out.println(date);
          	    
            	  Date date1 = new Date(1577808000000L);
            	  System.out.println(date1);
        
    • 对于Date有几个常用的方法

      • long getTime( ):返回自1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数.

      • boolean after(Date date):两个日期的比较,如果调用的对象在传入的参数之后则返回true.

      • boolean before(Date date):两个日期的比较,如果调用的对象在传入的参数之前则返回true.

        Long timeStamp = date.getTime();
        System.out.println(timeStamp);
        
        boolean f = date.before(date1);
        boolean f1 =  date.after(date1);
        System.out.println(f+"=="+f1);
        
  2. DateFormate

    • 对于DateFormate类,一般我们最常用的就是用来格式化时间,因为这个类为抽象类,所以需要子类SimpleDateFormat来实现。

    • 比如将时间(2022-10-19-10-29)格式化为(2022-10-19/10:30)

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/HH:mm");
              String time1 = "2022-10-19-10-29";
              Date date1 = sdf.parse(time1);
              System.out.println(date1);
      
      常用的占位符
      
      y  四位数年份
      M  ⽉
      d  ⽇
      h  时 在上午或下午 (1~12)
      H  时 在⼀天中 (0~23)
      m  分
      s  秒
      S  毫秒
      
    • 同时,也可以将Date时间按照一定的顺序格式化

              Date date = new Date();
      
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      
            String dateTime = sdf.format(date);
              System.out.println(dateTime);
      
  3. JDK8新特性

    JDK8中,提供了LocalDate,LocalTime,LocalDateTime。

    • LocalDate:只包含年月日的日期

    • LocalTime:只包含时分秒的日期

    • LocalDateTime:包含了日期和时间

    • 常用的api:

       //getYear() int 获取当前⽇期的年份
       //getMonth() Month 获取当前⽇期的⽉份对象
       //getMonthValue() int 获取当前⽇期是第⼏⽉
       //getDayOfWeek() DayOfWeek 表示该对象表示的⽇期是星期⼏
       //getDayOfMonth() int 表示该对象表示的⽇期是这个⽉第⼏天
       //getDayOfYear() int 表示该对象表示的⽇期是今年第⼏天
       
       //withYear(int year) LocalDate 修改当前对象的年份
       //withMonth(int month) LocalDate 修改当前对象的⽉份
       //withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当⽉的⽇期
       
       //plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数
       //plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的⽉份数
       //plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数
       //plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数
       
       //minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数
       //minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的⽉数
       //minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数
       //minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数
       
       //isBefore(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在
       other对象⽇期之前
       //isAfter(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在
       other对象⽇期之后
       //isEqual(ChronoLocalDate other) boolean ⽐较两个⽇期对象是否相等
      
    • 同时JDK8也给它们提供给了日期格式化

      DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
      
            String str = dtf.format(localDateTime);
              System.out.println(str+"---");
      
    • 以及提供了计算两个日期差

       Duration duration = Duration.between(localDateTime1 , localDateTime);
                System.out.println(duration.toDays());
            System.out.println(duration.toHours());
      

    2.数据库中的时间类型

    1. 数据库中的时间类型就简单分为DATETIME,TIME,DATE,YEAR,TIMESTAMP

      • DATE:存放日期
      • TIME:时间值或持续时间
      • DATETIME:混合日期和时间值
      • YEAR:年份值
      • TIMESTAMP:混合日期和时间值,时间戳
    2. 对于MySQL来说,date类型没有长度,如果定义表的时候给时间类型加一个长度,会报如下错误

    在这里插入图片描述

    1. 当然一般使用情况是根据业务需求进行选择不同的。比如如果想只存年份,例如一个学生的入学年份,就可以使用YEAR,如果想保存年月日,就可以用DATE,比如出生日期。

    3. 前后端时间交互

    1. 对于前后端的时间交互,一般可以使用序列化和反序列化来选择如何传值,一般向前端传值使用的是

      @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") 年月日都显示
      
      @JsonFormat(pattern="yyyy",timezone = "GMT+8") 只显示年
      
      @JsonFormat(pattern="MM-dd",timezone = "GMT+8") 显示月日,不显示年
      
      @JsonFormat(pattern="HH:mm:ss",timezone = "GMT+8") 显示时间
      

      要注意的是,使用注解时需要加在实体类中,如下图所示
      在这里插入图片描述

    2. 对于前端向后端传值,可以使用

      		Date min = trainRoundService.minTime(trainId);
              SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
              String str = sdf.format(min);
      

    如下图所示
    在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐