【JavaSE】时间API

发布时间 2023-12-02 16:38:49作者: 沙汀鱼

JDK8版本之前的时间API(了解)

Data类

SimpleDateFormat类

SimpleDateFormat类指定格式查API帮助文档即可

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

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {
//        SimpleDateFormat dateFormat = new SimpleDateFormat(); // 默认日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日"); // 指定日期格式

        Date date = new Date();
        System.out.println(dateFormat.format(date));

        String s = "2023年12月02日";
        System.out.println(dateFormat.parse(s)); // 调用.parse必须保证字符串和SimpleDateFormat设定的日期格式相同才能解析
    }
}
计算你来到这个世界多少天
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class BtdCompute {
    public static void main(String[] args) throws ParseException {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入您的生日:xxxx年xx月xx日");
        String s = in.next();

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        Date btd = dateFormat.parse(s);

        Date now = new Date();

        long ms = now.getTime() - btd.getTime();
        long d = ms / 1000 / 60 / 60 / 24;
        System.out.println(d);
        long y = d / 365;
        System.out.println(y);
    }
}

Calendar类


  • Calendar 类是一个抽象类,不能创建对象。
    Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
   Calendar rightNow = Calendar.getInstance();
  • 获取和设置日期对象时,一般通过调用Calendar的静态成员变量来实现。
    注意:
    月份是0~11
    星期1~7分别对应[日 一 二 三 四 五 六]
Calendar的get方法样例
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.get(Calendar.YEAR));
        /*月份是0~11*/
        System.out.println(calendar.get(Calendar.MONTH));
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        /*星期是1~7
        日 一 二 三 四 五 六
        1  2  3  4 5  6 7
        */
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
    }
}

Calendar和Date类对象转换

判断某一天是否是疯狂星期四
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarTest1 {
    public static void main(String[] args) throws ParseException {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入日期:xxxx年xx月xx日");
        String s = in.next();

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = dateFormat.parse(s);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date); // 将Date对象转换为Calendar对象

//        calendar.set(2023,11,30); //设置日期为2023年12月30(周六)
//        calendar.set(2023,10,30); //设置日期为2023年11月30(周四)

        int week = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println((week == 5));
    }
}
判断输入日期是一年中的哪一天
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class CalendarTest2 {
    public static void main(String[] args) throws ParseException {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入日期:xxxx年xx月xx日");
        String s = in.next();

        SimpleDateFormat dateFormat = new SimpleDateFormat("yy年MM月dd日");
        Date date = dateFormat.parse(s);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
    }
}

JDK8版本及之后的时间API(即查即用即可)

日历类

日期格式化类

时间类

时间间隔工具类

根据输入的生日判断年龄
public class GetAge {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入生日:xxxx年xx月xx日");
        String s = in.next();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年M月d日");
        LocalDate btd = LocalDate.parse(s, dateTimeFormatter);

        LocalDate now = LocalDate.now();

        System.out.println(ChronoUnit.YEARS.between(btd, now));
    }
}