目录
帮助文档中查看:

它在java.sql包下,我们要学习的Date应该是在util包下的Date,所以要注意我们应该学习哪一个包下的类。

可以看到它没有用final修饰所以它是可以有子类的,上面的java.sql包下的Date就是它的子类。它继承了Object实现了三个接口。

我们只学习它没有过时的构造方法。

程序演示:
- import java.util.Date;
-
- /*
- Date(long date) 分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。
- Date() 分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒。
- */
- public class DateDemo {
- public static void main(String[] args) {
- Date date1 = new Date();
- System.out.println(date1);//Sun Jun 12 18:00:47 CST 2022
- //没得到地址值,表示它重写了toString方法.
-
- long date2 = 1000*60*60;
- Date date3 = new Date(date2);
- System.out.println(date3);//Thu Jan 01 09:00:00 CST 1970
- }
- }

程序演示:
- import java.util.Date;
-
- /*
- public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
- public void setTime(long time):设置时间,给的是毫秒值
- */
- public class DateDemo02 {
- public static void main(String[] args) {
- //创建Date对象
- Date date = new Date();
- long time = date.getTime();
- System.out.println(time);//1655036423115
-
- long l = System.currentTimeMillis();
- System.out.println(l);//1655036449309此方法与上面Date对象调用的getTime方法同理
-
- //将time得到的毫秒值转换为年数
- System.out.println(time * 1.0 / 1000 / 60 / 60 / 24 / 365);//可以得到1970年1月1日距今过了52.4808..年了
-
- //public void setTime(long time):设置时间,给的是毫秒值
- time = System.currentTimeMillis();
- date.setTime(time);
- System.out.println(date);//Sun Jun 12 20:26:15 CST 2022
- }
- }
这个类提供了让我们想要获得时间的格式。

他在java.text包下,它也间接的继承自Object。


SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析让日期。我们重点学日期格式化和解析。
日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从'A'到'Z'以及从'a'到'z'未加引号的字母被解释为表示日期或时间字符串的组成部分的模式字母。


解析:也就是我给了一个字符串最终,我得到一个日期对象。
程序演示:
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
-
- /*
- 构造方法:
- SimpleDateFormat(),构造一个 SimpleDateFormat使用默认模式和日期格式符号默认 FORMAT区域设置。
- SimpleDateFormat(String pattern),构造一个 SimpleDateFormat使用给定的模式和默认的默认日期格式符号 FORMAT区域设置。
- 格式化:从Date到String
- public final String format(Date date),将日期格式化成日期/时间字符串
- 解析:从String到Date
- public Date parse(String source),给定字符串的开始解析文本以生成日期
- */
- public class SimpleDateFormatDemo {
- public static void main(String[] args) throws ParseException {
- //第一件事情:格式化:从Date到String
- Date date = new Date();
- //第二件事调用format方法.这个方法在SimpleDateFormat类里面,调用方法就得创建对象
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String format = simpleDateFormat.format(date);
- System.out.println(format);//2022-06-12 21:04:34
- System.out.println("-------------");
-
- //第三件事,解析
- String s = "2022-6-12 21:05:41";
- //创建对象
- SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date parse = simpleDateFormat1.parse(s);
- System.out.println(parse);//Sun Jun 12 21:05:41 CST 2022
- }
- }
Calendat也叫日历类

在这张图片上有年月日,星期这样的日历信息,这样的日历信息也被称为日历字段,而我们的日历就是由这些日历字段组成的,了解了这个之后我们到帮助文档中查看:

它在java.util包下(需要导包),继承自Object,有一个直接子类。

可以看到它是一个抽象类,不能直接实例化,可以通过它的子类来实例化,并实现了三个接口。


它的日历字段有很多且都是静态修饰的,所以我们访问日历字段可以直接类名通过名调方法。

它是抽象类,不能直接创建对象,但是它的构造方法可以用于子类访问父类数据的初始化。

它的成员方法大部分都没有使用静态修饰,所以我们要使用它的成员方法需要通过对象来使用,这个时候我们就得有一个对象。
但是我们说过它的创建对象方式是通过类方法来实现的。
概述:
Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化;Calendar rightNOW = Calendar.getInstance();
程序演示:
- import java.util.Calendar;
-
- /*
- Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。
- Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化;
- Calendar rightNOW = Calendar.getInstance();
- */
- public class CalendarDemo {
- public static void main(String[] args) {
- //获取Calendar对象
- Calendar c = Calendar.getInstance();//这是多态的形式进行创建对象的
- // System.out.println(c);
-
- /*
- 获取年月日
- public int get(int field)
- 返回给定日历字段的值。 在宽松模式下,所有日历字段都已标准化。 在非宽松模式下,所有日历字段都经过验证,
- 如果任何日历字段具有超出范围的值,则此方法将引发异常。 规范化和验证由complete()方法处理,该方法依赖于日历系统。
- */
- int year = c.get(Calendar.YEAR);
- int month = c.get(Calendar.MONTH) + 1;//注意月是从0开始的所以需要+1
- int date = c.get(Calendar.DATE);
- System.out.println(year + "年" + month + "月" + date + "日");//2022年6月13日
- }
- }

get方法已经学习过了,就说返回给定日历字段的值。
add方法,根据日历的规则,将指定的时间量添加或减去给定的日历字段(待会详细演示)。
set方法设置当前日历的年月日。
代码演示:
- import java.util.Calendar;
-
- /*
- public abstract void add(int field, int amount)
- 根据日历的规则,将指定的时间量添加或减去给定的日历字段。 例如,要从日历的当前时间减去5天,
- 您可以通过调用以下方法来实现:
- add(Calendar.DAY_OF_MONTH, -5)
- public void set(int field, int value)
- 将给定的日历字段设置为给定值。 无论宽大模式如何,此方法都不会解释该值。
- */
- public class CalendarDemo {
- public static void main(String[] args) {
- //获取日历对象
- Calendar instance = Calendar.getInstance();
-
- //public int get(int field)返回给定日历字段的值。 在宽松模式下,所有日历字段都已标准化。
- int year = instance.get(Calendar.YEAR);
- int month = instance.get(Calendar.MONTH) + 1;//注意月是从0开始的所以需要+1
- int date = instance.get(Calendar.DATE);
- System.out.println(year + "年" + month + "月" + date + "日");//2022年6月13日
-
- //需求1:获取三年前的今天
- //public abstract void add(int field, int amount),根据日历的规则,将指定的时间量添加或减去给定的日历字段.
- // instance.add(Calendar.YEAR,-3);//这里就是将当前的年份减去3
- int year1 = instance.get(Calendar.YEAR);
- int month1 = instance.get(Calendar.MONTH) + 1;//注意月是从0开始的所以需要+1
- int date1 = instance.get(Calendar.DATE);
- System.out.println(year1 + "年" + month1 + "月" + date1 + "日");//2019年6月13日
-
- //需求2:获取十年后的五天前
- instance.add(Calendar.YEAR,+10);//注意上述代码已经将年份加3了,所以我们要不吧上面的代码注释掉要么多加3年
- instance.add(Calendar.DATE,-5);
- int year2 = instance.get(Calendar.YEAR);
- int month2 = instance.get(Calendar.MONTH) + 1;//注意月是从0开始的所以需要+1
- int date2 = instance.get(Calendar.DATE);
- System.out.println(year2 + "年" + month2 + "月" + date2 + "日");//2032年6月8日
-
- //需求3:将当前的日历的年月日设置为2048年6月13日
- //public void set(int year,int month,int date),将给定的日历字段设置为给定值。 无论宽大模式如何,此方法都不会解释该值。
- instance.set(2048,5,13);//注意set的月份要-1
- int year3 = instance.get(Calendar.YEAR);
- int month3 = instance.get(Calendar.MONTH) +1;
- int date3 = instance.get(Calendar.DATE);
- System.out.println(year3 + "年" + month3 + "月" + date3 + "日");//2048年6月13日
- }
- }
--欢迎大家和我一起交流java知识。
知无不言,言无不尽
