Date,SimpleDateFormat和Calendar相关时间类知识点总结

Date类

Date概述:

此类有很多方法过时,但以前的项目依然有,需要学一下
java.util.Date`类 表示特定的瞬间,精确到毫秒。
tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。

Date构造方法:

 public Date():
	从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date):
	将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。

示例:

		 //1.创建一个时间对象
        Date d1 = new Date();
        System.out.println(d1);         //Tue Sep 19 20:58:17 CST 2023

        //2.创建对象表示一个指定时间
        Date d2 = new Date(0L);         //时间从时间原点开始过了0ms
        System.out.println(d2);         //Thu Jan 01 08:00:00 CST 1970    1000L-->//Thu Jan 01 08:00:01 CST 1970
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。

Date常用方法:

 public long getTime()
	把日期对象转换成对应的时间毫秒值。
 public void setTime(long time)
	把方法参数给定的毫秒值设置给日期对象

举例:

		//3.setTime  修改时间
        //1000ms=1s
        d2.setTime(1000L);
        System.out.println(d2);         //Thu Jan 01 08:00:01 CST 1970

        //4.getTime获取当前时间的毫秒值
        long time = d2.getTime();
        System.out.println(time);       //1000
小结:Date表示特定的时间瞬间,我们可以使用Date对象对时间进行操作。

案列分析:

  //时间计算:
        //需求1: 打印时间原点开始一年之后的时间
        //需求2:定义任意俩个Data对象,比较一下哪个时间在前,哪个时间在后

        //1
        //创建一个对象,表示时间原点
        Date d3 = new Date();
        //获取d1时间的毫秒值
        long time1 = d1.getTime();
        //在这个基础上我们要加一年的毫秒值即可
        time1 = time1 + 1000L * 60 * 60 * 24 * 365;
        //把计算之后的时间毫秒值,再设置回d1当中
        d1.setTime(time1);

        //2
        Random r =new Random();
        Date d4=new Date(Math.abs(r.nextInt()));
        Date d5=new Date(Math.abs(r.nextInt()));
        System.out.println(d4);
        System.out.println(d5);
        //比较时间
        if(d4.getTime()>d5.getTime()){
            System.out.println("第二个时间在前");
        }
        else if(d4.getTime()<d5.getTime()){
            System.out.println("第一个时间在前");
        }else{
            System.out.println("一样大");
        }

比较方法以过时

SimpleDateFormat类

SimpleDateFormat类概述:

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

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

SimpleDateFormat构造方法:

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。
构造方法为:

public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。

格式规则:

详情在最后面有图片或参考java的API帮助文档

标识字母(区分大小写)含义
y
M
d
H
m
s

SimpleDateFormat的常用方法:

public String format(Date date):将Date对象格式化为字符串。
public Date parse(String source):将字符串解析为Date对象。

举例:

 			//利用空参构造创建SimpleDateFormat对象,默认格式
            SimpleDateFormat sdf1 = new SimpleDateFormat( );
            Date d = new Date(0L);
            String str = sdf1.format(d);
            System.out.println(str);                //1970/1/1 上午8:00

            //利用带参构造创建SimpleDateFormat对象,指定格式
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            Date d = new Date(0L);
            String str = sdf2.format(d);
            System.out.println(str);                //1970年01月01日 08:00:00

            String str = "2023-11-11 11:11:11";     //创建对象的格式要和字符串一致
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = sdf2.parse(str);
            System.out.println(d);                   //Sat Nov 11 11:11:11 CST 2023
小结:DateFormat可以将Date对象和字符串相互转换。

案例分析:

	1.假设,你初恋的出生年月日为:2000-11-11
     请用字符串表示这个数据,并将其转换为:2000年11月11日
     创建一个Date对象表示2000年11月11日
     创建一个SimpleDateFormat对象,并定义格式为年月日把时间变成:2000年11月11日
		//1.可以通过2000-11-11进行解析,解析成一个Date对象
		String str = "2000-11-11";
		//2.解析
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		Date date = sdf1.parse(str);
		//3.格式化
		SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
		String result = sdf2.format(date);
		System.out.println(result);
		2.秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值)
            秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值)
            小贾下单并付款的时间为:2023年11月11日 0:01:0
            小皮下单并付款的时间为:2023年11月11日 0:11:0
            用代码说明这两位同学有没有参加上秒杀活动?
		//1.定义字符串表示三个时间
		String startstr = "2023年11月11日 0:0:0";
		String endstr = "2023年11月11日 0:10:0";
		String orderstr = "2023年11月11日 0:01:00";
		//2.解析上面的三个时间,得到Date对象
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
		Date startDate = sdf.parse(startstr);
		Date endDate = sdf.parse(endstr);
		Date orderDate = sdf.parse(orderstr);
		
		//3.得到三个时间的毫秒值
		long startTime = startDate.getTime();
		long endTime = endDate.getTime();
		long orderTime = orderDate.getTime();
		
		//4.判断
		if (orderTime >= startTime && orderTime <= endTime) {
		    System.out.println("参加秒杀活动成功");
		} else {
		    System.out.println("参加秒杀活动失败");
		}

Calendar类

Calendar类概述:

java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。
细节://会根据系统的不同时区获得不同的日历对象,默认表示当前时间
                    会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中
                            0 : 纪元
                            1 : 年
                            2 : 月
                            3 : 一年中的第几周
                            4 : 一个月中的第几周
                            5 : 一个月中的第几天(日期)
                            ......16(可以用常量代替)

                     月份:   范围0~11  如果获取出来的是0,那么实际上的是1月.
                    星期日: 在老外的眼里,星期日是一周中的第一天 1(星期日)  2(星期一)等等

获取Calendar类的对象:

有两种方式可以获取GregorianCalendar对象:
	直接创建GregorianCalendar对象;
	通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象

常用方法:

		public final Date getTime()               //获取日期对象
        public final setTime(Date date)           //给日历设置时间对象
        public long  getTimeInMillis()            //拿到时间毫秒值
        public void  setTimeInMillis(long millis) //给日历设置时间毫秒值
        public int   get(int field)               //取日历中的某个字段信息
        public void  set(int field,int value)     //修改日历的某个字段信息
        public void  add(int field,int amount)    //为某个字段增加/减少指定的值

举例:

  1. get方法
public class Demo {
    public static void main(String[] args) {
        //1.获取一个GregorianCalendar对象
        Calendar instance = Calendar.getInstance();//获取子类对象

        //2.打印子类对象
        System.out.println(instance);

        //3.获取属性
        int year = instance.get(Calendar.YEAR);
        int month = instance.get(Calendar.MONTH) + 1;//Calendar的月份值是0-11
        int day = instance.get(Calendar.DAY_OF_MONTH);

        int hour = instance.get(Calendar.HOUR);
        int minute = instance.get(Calendar.MINUTE);
        int second = instance.get(Calendar.SECOND);

        int week = instance.get(Calendar.DAY_OF_WEEK);//返回值范围:1--7,分别表示:"星期日","星期一","星期二",...,"星期六"

        System.out.println(year + "年" + month + "月" + day + "日" + 
                           	hour + ":" + minute + ":" + second);
        System.out.println(getWeek(week));

    }

    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }
}

  1. set方法
public class Demo {
    public static void main(String[] args) {
        //设置属性——set(int field,int value):
		Calendar c1 = Calendar.getInstance();//获取当前日期

		//计算班长出生那天是星期几(假如班长出生日期为:1998年3月18日)
		c1.set(Calendar.YEAR, 1998);
		c1.set(Calendar.MONTH, 3 - 1);//转换为Calendar内部的月份值
		c1.set(Calendar.DAY_OF_MONTH, 18);

		int w = c1.get(Calendar.DAY_OF_WEEK);
		System.out.println("班长出生那天是:" + getWeek(w));
    }
    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }
}
  1. add方法
public class Demo {
    public static void main(String[] args) {
        //计算200天以后是哪年哪月哪日,星期几?
		Calendar c2 = Calendar.getInstance();//获取当前日期
        c2.add(Calendar.DAY_OF_MONTH, 200);//日期加200

        int y = c2.get(Calendar.YEAR);
        int m = c2.get(Calendar.MONTH) + 1;//转换为实际的月份
        int d = c2.get(Calendar.DAY_OF_MONTH);

        int wk = c2.get(Calendar.DAY_OF_WEEK);
        System.out.println("200天后是:" + y + "年" + m + "月" + d + "日" + getWeek(wk));

    }
    //查表法,查询星期几
    public static String getWeek(int w) {//w = 1 --- 7
        //做一个表(数组)
        String[] weekArray = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        //            索引      [0]      [1]       [2]      [3]       [4]      [5]      [6]
        //查表
        return weekArray[w - 1];
    }
}

附录:

在这里插入图片描述

需知:

<font color="red">目前用的更多的是JDK8版本的时间相关类</font>
比较:
JDK7:代码麻烦  日期对象的计算和比较都要转化为毫秒值          多线程环境下会导致数据安全问题
JDK8: 代码简单  有更简单的判断的方法和计算时间间隔的方法     时间日期对象都是不可变的,解决了线程安全的问题

后续会更新一期新版本的时间相关类

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
DateDateJava中的一个基础,它代表了一个日期和时间Date通常用于获取当前日期和时间,或者用于存储一个特定的日期和时间。它提供了一些方法来获取日期和时间的各个部分,如年、月、日、小时、分钟、秒等。 DateFormatDateFormatJava中用于格式化或解析日期和时间。它通常用于将Date对象转换为可读的字符串格式,或者从字符串中解析出日期和时间DateFormat提供了一些静态方法,可以设置日期和时间的格式,例如日期应显示月、日还是年,是否需要显示时间等。 SimpleDateFormatSimpleDateFormatDateFormat的一个子,它提供了一些更方便的方法来格式化和解析日期和时间。与DateFormat相比,SimpleDateFormat使用起来更简单,更容易使用。它可以接受用户定义的格式字符串,这使得用户可以根据自己的需要自定义日期和时间的显示格式。 CalendarCalendar是一个抽象,用于处理日历相关的任务。它提供了表示特定日期和时间的对象,并且允许进行各种日历操作,如添加月份、年份等。Calendar可以与Date一起使用,以便获取日期的各个部分或执行日历操作。 这些的主要用途如下: * Date:获取和处理日期和时间的基本工具。 * DateFormatSimpleDateFormat:用于格式化和解析日期和时间的工具。 * Calendar:用于处理日历相关的任务,例如添加月份、年份等。 在Java中,这些通常一起使用,以便更方便地处理日期和时间。例如,可以使用DateCalendar来获取特定日期或时间,然后使用DateFormat或SimpleDateFormat将其转换为可读的字符串格式。也可以使用Calendar进行日历操作,并使用DateDateFormat将结果存储为Date对象或字符串。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

砖智懒病

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值