1、在jdk8.0之前的日期时间的使用

1.1、常用方法:

 long begin = System.currentTimeMillis();        //获取当前系统时间对应的毫秒值
 Date date = new Date();
 System.out.println(date);       				//获取当前时间和日期

1.2、SimpleDateFormat:用于日期时间的格式化和解析

格式化:日期 —> 字符串(format)

解析:字符串 —> 日期(parse)

测试代码如下所示:

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

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月DD日 HH:mm:ss ");
        String date1 = sdf.format(date);
        System.out.println(date1);

        try {
            date = sdf.parse(date1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date);
    }
}

输出结果:

2023年08月222日 18:47:03 Thu Aug 10 18:47:03 CST 2023

1.3、Calendar(日历,抽象类)

import java.util.Calendar;

public class Test {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();         //获取Calendar对象
        //测试方法
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        //②、常用方法: get(int field) / set(int field,xx) / add(int field ,xx) / getTime() / setTime()
    }
}

2、例题:

2.1、如何将一个java.util.Date的实例转换为java.sql.Date的实例?

import java.util.Date;

public class Test1 {
    public static void main(String[] args) {
        Date date1 = new Date();
        java.sql.Date date2 = new java.sql.Date(date1.getTime());       //转换
        System.out.println(date2);      //输出结果:2023-08-11
    }
}

2.2、将控制台获取的年月日(比如: 2023-8-11)的字符串数据,保存在数据库中。(简化为得到java.sql.Date的对象,此对象对应的时间为2023-8-11)

public static void test02(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入年份:");
        String year = sc.next();
        System.out.print("请输入月份:");
        int month = sc.nextInt();
        System.out.print("请输入天数:");
        int day = sc.nextInt();
        String date = year + "-" + month + "-" + day;
        Date date1 = null;
        try {
            date1 = sdf.parse(date);
        } catch (ParseException e) {
            e.getStackTrace();
        }
        java.sql.Date date2 = new java.sql.Date(date1.getTime());       //转换
        System.out.println(date2);                                            //输出

输出结果:

请输入年份:2023 请输入月份:8 请输入天数:11 2023-08-11

2、在jdk8.0之后的日期时间的使用

2.1、之前时间日期存在的问题:

可变性:日期和时间这样的类应该是不可变的。

偏移性: Date中的年份是从1900开始的,而月份都从0开始。

格式化:格式化只对Date有用,Calendar则不行。

此外,它们也不是线程安全的;不能处理闰秒等。

2.2.1、本地日期时间:LocalDate、LocalTime、LocalDateTime

public static void test03(){
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();

        System.out.println(localDate);      //2023-08-11
        System.out.println(localTime);      //18:28:50.115896700
        System.out.println(localDateTime);  //2023-08-11T18:28:50.116898500

        //of指定年月日或者其他时间,没有偏移量
        LocalDate localDate1 = LocalDate.of(2002,6,28);
        System.out.println(localDate1);

    }

2.2.2、Instant(和Date相似):时间线上的一个瞬间点,这可能被用来记录应用程序中的事件时间戳。

 public static void test05(){
        Instant instant = Instant.now();
        System.out.println(instant);        //以伦敦时间为准
    }

2.2.3、DateTimeFormatter(类似于SimpleDateFormat):用于格式化和解析LocalDate、LocalTime、LocalDateTime

  public static void test06(){
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");     //自定义格式化
        LocalDateTime localDateTime = LocalDateTime.now();
        String format = dtf.format(localDateTime);
        System.out.println(format);         //2023-08-11 07:05:37
    }