一:Date日期类

概述:Date类表示特定的瞬间,精确到毫秒。Date类的构造函数可以把毫秒值转成日期对象

1.Date():用来创建当前日期时间的Date对象

2.Date(long date):用于创建指定时间的Date对象,其中date参数表示1970年1月 1日0时0分0以来的毫秒数,即时间戳

public class DateTest01 {
    public static void main(String[] args) {
        //日期在开发中常来储存   生日、下单时间、付款时间、审批时间等
        //类Date表示特定的时间,精确到毫秒
        Date date1=new Date(); //获取系统的时间
        System.out.println(date1);

        long time=date1.getTime();  //计算当前时间距离1970年1月1日 08:00:00 的 毫秒值----时间戳
        System.out.println(time);

        Date date2=new Date(1000); //创建一个距离1970年1月1日 08:00:00(东八区) 经过了多少毫秒的一个时间
        System.out.println(date2);
    }
}

二:DateFormat类

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

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

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

SimpleDateFormat 是一个具体类,用于以区域设置敏感的方式格式化和解析日期。我们重点学习日期格式和解析

日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从 ‘A’ 到 ‘Z’ 以及从 ‘a’ 到 ‘z’ 引号的字母被解释为表示日期或时间字符串的组件的模式字母

常用:

字母

单位

y


M


d


H

小时

m


s


public class DateFormate02 {
    public static void main(String[] args) throws ParseException {
        //SimpleDateFormate 用来实现 日期 和字符串 之间的相互转化
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //创建日期格式化类的对象,指定格式符号
        Date date1=new Date();

        //把 日期 转化成指定格式的 字符串
        String format=sdf.format(date1);
        System.out.println(format);

        //把指定格式的 字符串  转化成  日期
        String time="2000/10/20 8:20:34";
        Date date2=sdf.parse(time);
        System.out.println(date2);

    }
}

 三:Calender类

Calendar类用于完成日期和时间字段的操作,它可以通过特点的方法设置和读取日期的特定部分。比如年、月、日、时、分、秒等。

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历

例如:

public class CalendarTest03 {
    public static void main(String[] args) {
        //Calendar 类是一个抽象类,可以通过Canlendar的getInstance方法返回一个Calendar对象
        Calendar calendar=Calendar.getInstance();
 
 
        }
}
public class CalendarTest03 {
    public static void main(String[] args) {
        //Calendar 类是一个抽象类,可以通过Canlendar的getInstance方法返回一个Calendar对象
        Calendar calendar=Calendar.getInstance();
        Date date1=calendar.getTime();
        System.out.println(date1);

        long timeInMillis= calendar.getTimeInMillis();
        System.out.println("当前时间的毫秒值:"+timeInMillis);

        TimeZone timeZone=calendar.getTimeZone();
        System.out.println("时区:"+timeZone);

        //get方法可以根据 指定的日历字段  获取时间对应的值
        int year=calendar.get(Calendar.YEAR);
        System.out.println("年份:"+year);
        int month= calendar.get(Calendar.MONTH);
        System.out.println("月份"+(month+1)); //0-11 表示 1-12月
        int date= calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("日期"+date);
        int day0fYear= calendar.get(Calendar.DAY_OF_YEAR);
        System.out.println("本年的第"+day0fYear);

        System.out.println("----------------");

        //可获取 指定时间  月份0-11  表示1-12月
        calendar.set(2000,9,28,25,32,35);
        Date date2=calendar.getTime();
        System.out.println(date2);
    }
}

 题目:请使用日期时间相关的API,计算出一个人已经出生了多少天。

思路:1.获取当前时间对应的毫秒值

        2.获取自己出生日期对应的毫秒值

        3.两个时间相减(当前时间– 出生日期)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
 
/*
 把String转换成Date对象
*/
public class Demo {
    public static void main(String[] args) throws ParseException {
        System.out.println("请输入出生日期 格式 YYYY-MM-dd");
        // 获取出生日期,键盘输入
        String birthdayString = new Scanner(System.in).next();
        // 将字符串日期,转成Date对象
        // 创建SimpleDateFormat对象,写日期模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        // 调用方法parse,字符串转成日期对象
        Date birthdayDate = sdf.parse(birthdayString);
        // 获取今天的日期对象
        Date todayDate = new Date();
        // 将两个日期转成毫秒值,Date类的方法getTime
        long birthdaySecond = birthdayDate.getTime();
        long todaySecond = todayDate.getTime();
        long secone = todaySecond-birthdaySecond;
        if (secone < 0){
            System.out.println("还没出生呢");
        } else {
            System.out.println(secone/1000/60/60/24);
        }
    }
}