日期时间相关总结

Date

  • 时间相关概念

    1
    2
    3
    java.util.Date: 表示日期和时间的类
    毫秒: 千分之一秒 1000毫秒 = 1
    毫秒值的作用: 可以对时间和日期进行计算
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package org.example;

    import java.util.Date;

    /**
    * Hello world!
    */
    public class testUtilPackageDate {
    public static void main(String[] args) {
    demo01();
    dame02(100L);
    dame03();
    }

    private static void demo01() {
    // 空参: 获取当前系统的日期和时间
    Date date = new Date();
    System.out.println("date1 = " + date);
    }

    private static void dame02(long l) {
    // 传递毫秒值,把毫秒值转换为 Date 日期
    Date date = new Date(l);
    System.out.println("date2 = " + date);
    }

    private static void dame03() {
    // getTime: 把日期转换为毫秒值(相当于 System.currentTimeMillis() )
    Date date = new Date();
    System.out.println("date.getTime() = " + date.getTime());
    }

    }

DateFormat 类

  • 说明

    java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以再Date 对象与String 对象之间来回转换

    • 格式化: 按照指定的格式,Date 对象转换为String 对象

    • 解析: 按照指定的格式,String 对象转换为Date 对象

    • 使用

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      package org.example;

      import java.text.DateFormat;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;

      public class textDateFormat {
      public static void main(String[] args) throws ParseException {
      demo01();
      demo02();
      }


      private static void demo01() {
      // date => format
      Date date = new Date();
      DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      System.out.println("sdf.format(date) = " + sdf.format(date));
      }

      private static void demo02() throws ParseException {
      // String => Date
      String date = "2025-12-21";
      DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      System.out.println("sdf.parse(date) = " + sdf.parse(date));
      }
      }

  • 计算一个人已经出生了多少天

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private static void demo03() throws ParseException {
    // 现在
    Long nowDate = System.currentTimeMillis();
    // 出生日期
    String bornDate = "1991-02-19";
    // 1. 将字符串日期转换为 Date
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date parseBornDate = sdf.parse(bornDate);
    // 将日期类型转换为 ms
    long bornDateTime = parseBornDate.getTime();
    long diffTime = nowDate - bornDateTime;
    System.out.println("diffTime = " + diffTime);
    // 转换为年月日 /1000(s)/60(min)/60(h)/24(day)=> day
    long diffDay = diffTime / 1000 / 60 / 60 / 24;
    System.out.println(diffDay);
    }

Calendar 日历类

  • 根据Calendar 类的API 文档,常用方法有

    • get(int field): 返回给定日历字段的值

      1
      2
      3
      4
      5
      6
      7
      public class CalendarTest {
      public static void main(String[] args) {
      Calendar calendar = Calendar.getInstance();
      // 当前年份
      System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
      }
      }
    • set(int field,int value): 将给定的日历字段设置为给定值

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      public class CalendarTest {
      public static void main(String[] args) {
      Calendar calendar = Calendar.getInstance();
      // 设置年份
      calendar.set(Calendar.YEAR, 9090);
      // 获取设置后的年份信息
      int year = calendar.get(Calendar.YEAR);
      System.out.println("YEAR: " + year);
      // 同时设置年月日
      calendar.set(0000, 6, 2);
      }
      }
    • add(int field,int amount): 根据日历的规则,为给定的日历字段添加或减去指定的时间量

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      package org.example;

      import java.util.Calendar;

      public class CalendarTest {
      public static void main(String[] args) {
      Calendar calendar = Calendar.getInstance();
      // 1: +1/-1
      calendar.add(Calendar.YEAR, 1);
      System.out.println(calendar.get(Calendar.YEAR));
      }
      }

    • getTime(): 返回一个表示此Calendar 时间值(从厉元到现在的毫秒偏移量)Date 对象

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      package org.example;

      import java.util.Calendar;
      import java.util.Date;

      public class CalendarTest {
      public static void main(String[] args) {
      Calendar calendar = Calendar.getInstance();
      Date time = calendar.getTime();
      // out: Thu Nov 03 18:24:02 CST 2022
      System.out.println(time);
      }
      }

JDK8 新增

  • 日期类
    • LocalDate: 不包含具体时间的日期
    • LocalTime: 不含日期的时间
    • LocalDateTime: 包含了日期以及时间
    • Instant: 代表的是时间戳
    • DateTimeFormatter:用于做时间的格式化和解析的
    • Duration: 用于计算两个时间间隔
    • Period: 用于计算两个日期间隔

实体类中日期数据类型

  • 使用

    1
    2
    3
    4
    5
    6
    public class User {
    private String username;
    private String password;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    }