Date类、Calendar类和SimpleDateFormat类

196 阅读2分钟
  1. 共同点:都是用来表示时间的类。

    不同点:

    • Date的大多数方法都已经被废弃了,现在都在使用Calendar。
    • Date的创建: Date date = new Date()
    • Calendar的创建则是通过Calendar calendar = Calendar.getInstance();因为Calendar的构造方法是protected,所以无法通过new进行创建
  2. Date类的使用:

package com.Class.DateClass;

import java.util.Date;

public class test {
    public static void main(String[] args) {
        // 1 创建Date对象
        Date date1 = new Date();
        System.out.println(date1.toString()); //Mon Oct 19 13:32:07 CST 2020
        System.out.println(date1.toLocaleString()); // 已过时 但也能用 2020-10-19 13:32:07

        // 创建昨天的
        Date date2 = new Date(date1.getTime() - (60*60*24*1000));
        System.out.println(date2.toLocaleString());//2020-10-18 13:32:07

        // 2 方法after before
        boolean b1 = date1.after(date2);
        System.out.println(b1); //true
        boolean b2 = date1.before(date2);
        System.out.println(b2); //false

        // 比较compareTo();比较的是毫秒值
        int d = date1.compareTo(date2);
        System.out.println(d); //如果参数Date等于此Date,则值为0 ; 如果此日期在Date参数之前,该值小于0 ; 如果此日期在Date参数0则值大于0

        // 比较是否相等 equals()
        boolean b3 = date1.equals(date2);
        System.out.println(b3); // false
    }
}
  1. Calendar类的使用:
package com.Class.CalendarClass;

import java.util.Calendar;

public class tset {
    public static void main(String[] args) {
        // 1. 创建 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString());//2020-10-19 13:45:36
        // 2. 获取时间信息
        // 获取年
        int year = calendar.get(Calendar.YEAR);
        // 获取月 从 0 - 11 ,calendar.get(Calendar.MONTH)+1才是你当前的月数
        int month = calendar.get(Calendar.MONTH)+1;
        // 日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        // 小时
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        // 分钟
        int minute = calendar.get(Calendar.MINUTE);
        // 秒
        int second = calendar.get(Calendar.SECOND);
        System.out.println(year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");//2020年10月19日13时45分36秒
        // 3. 修改时间
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(Calendar.DAY_OF_MONTH, 1);//
        System.out.println(calendar2.getTime().toLocaleString());//2020-10-1 13:45:36
        // 4. add修改时间
        calendar2.add(Calendar.HOUR, 1); // amount为正就加 负就减
        System.out.println(calendar2.getTime().toLocaleString());//2020-10-1 14:45:36
        // 5. 补充方法
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);// 月数最大天数
        System.out.println(max);
        int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);// 月数最小天数
        System.out.println(min);
    }
}
  1. SimpleDateFormat类:以语言环境有关的方式来格式化和解析日期的具体类。 格式化:日期-->文本 解析:文本-->日期

常用的时间模式字母:

字母日期或者时间示例
y2020
M年中月份08
d月中天数20
H一天中的小时数( 0-23 )16
m分钟42
s52
S毫秒357
--> 一个小小的示例:
package com.Class.SimpleDateFormat;

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

public class test {

    public static void main(String[] args) {
        //1.创建SimpleDateFormat对象y年M月
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        //2.创建Date对象
        Date date = new Date();
        //格式化Date:日期转换成字符串
        String str = sdf.format(date);
        System.out.println(str);

        //解析:字符串转换成日期
        //这里括号内的字符串要和上面创建SimpleDateFormat括号内的格式一样,否则则会抛出异常报错
        try {
            Date date1 = sdf.parse("2020-02-02 12-34-56");
            System.out.println(date1.toLocaleString());
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

}

输出结果: