美文网首页Android基础Java 基础
Java 常用类 08. Java 日期操作类

Java 常用类 08. Java 日期操作类

作者: yjtuuige | 来源:发表于2021-12-18 12:37 被阅读0次

    Java 中4种常用日期类:

    1. Date 类
    2. Calendar 类
    3. DateFormat 类
    4. SimpleDateFormat 类
    1. Date 类
    • Date 表示特定的瞬间,精确到毫秒。Date 类中的大部分方法都已被 Calendar 类中的方法所取代。
    • 时间单位:
      1 秒 = 1000 毫秒
      1 毫秒 = 1000 微秒
      1 微秒 = 1000 纳秒

    Date 类所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:

    • 年份 y 由整数 y - 1900 表示。
    • 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
    • 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
    • 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
    • 分钟按通常方式由 0 至 59 的整数表示。
    • 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。

    构造方法:

    • Date(long date) ,使用给定的毫秒时间值构造一个 Date 对象,不传值,默认是当前时间。

    常用方法:

    方法 描述
    public long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    public void setTime(long date) 设置时间,以毫秒为单位
    boolean after(Date when) 测试此日期是否在指定日期之后。
    boolean before(Date when) 测试日期是否在指定日期之前。
    int compareTo(Date anotherDate) 比较两个日期的顺序。如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。
    • 实例
    package com.base.demo05;
    
    import java.util.Date;
    
    public class Demo01 {
        public static void main(String[] args) {
            // 1.创建 Date 对象
            Date date1 = new Date();
            // 打印当前时间
            System.out.println("当前时间:"+date1);
            System.out.println(date1.toString());
            System.out.println(date1.toLocaleString()); // 已弃用
            // 返回时间毫秒数 自1970开始
            System.out.println("毫秒数:"+date1.getTime());
            // 创建date1副本
            Object clone = date1.clone();
            System.out.println(clone);
            // 2.创建昨天的时间对象
            Date date2 = new Date(date1.getTime() - (60 * 60 * 24 * 1000));
            System.out.println("昨天时间:"+date2.toLocaleString());
            // 3.方法 before() 之前
            boolean b1 = date1.before(date2);
            System.out.println(b1);
            // after()  之后
            boolean after = date1.after(date2); // false
            System.out.println(after);  // true
            // compareTo() 比较时间 大于返回1,小于返回-1,等于返回0
            int i = date1.compareTo(date2);
            System.out.println(i);  // 1
            // equals() 判断两个时间是否相等
            System.out.println(date1.equals(date2));    // false
            System.out.println(date1.equals(clone));    // true
        }
    }
    
    • 运行结果
    1. Calendar 类
    • 简介:Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

    • 构造方法: protected Calendar(); 由于修饰符是 protected,所以无法直接创建该对象。需要通过别的途径生成该对象。

      // 创建 Calendar 对象
      Calendar date1 = Calendar.getInstance();
      
    • 常用方法

    方法 描述
    static Calendar getInstance() 使用默认时区和区域获取日历
    void set(int year,int month, int date, int hourOfDay,int minute,int second) 设置年、月、日、时、分、秒。
    public int get(int field) 返回指定字段的值。字段如年、月、日等
    void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。
    Date getTime() 返回一个表示此 Calendar 时间值的 Date 对象。
    void add(int field,int amount) 按照日历的规则,给指定字段添加或减少时间
    long getTimeMillies() 以毫秒为单位返回该日历的时间值。
    getActualMaximum() 获取时间最大值
    getActualMinimum() 获取时间最小值
    • Calendar 类中的常量
    常量 描述
    Calendar.YEAR 取得年
    Calendar.MONTH 取得月
    Calendar.DAY_OF_MONTH 取得日
    Calendar.HOUR_OF_DAY 取得小时,24小时制
    Calendar.HOUR 取得小时,12小时制
    Calendar.MINUTE 取得分
    Calendar.SECOND 取得秒
    Calendar.MILLISECOND 取得毫秒
    Calendar.DAY_OF_WEEK 取得星期几
    • 实例
    package com.base.demo05;
    
    import java.util.Calendar;
    
    public class Demo02 {
        public static void main(String[] args) {
            // 1.创建 Calendar 对象
            Calendar date1 = Calendar.getInstance();
            System.out.println(date1.getTime().toLocaleString());
            // 毫秒值
            System.out.println(date1.getTimeInMillis());
            // 2.获取时间信息
            // 年
            int year = date1.get(Calendar.YEAR);
            // 月 (获取的月值,需要+1)
            int month = date1.get(Calendar.MONTH);
            // 日 或 DAY_OF_MONTH
            int day = date1.get(Calendar.DATE);
            // 小时: HOUR_OF_DAY 24小时; HOUR 12小时
            int hour = date1.get(Calendar.HOUR_OF_DAY);
            // 分钟
            int minute = date1.get(Calendar.MINUTE);
            // 秒
            int second = date1.get(Calendar.SECOND);
            // month 月值需要+1
            System.out.println(year + "年" + (month + 1) + "月"
                    + day + "日 " + hour + ":" + minute + ":" + second);
            // 3.修改时间
            Calendar date2 = Calendar.getInstance();
            // 修改 DATE 日
            date2.set(Calendar.DATE, 15);
            System.out.println(date2.getTime().toLocaleString());
            // 增减时间 add() 正数为增加,负数为减少 -1
            date2.add(Calendar.YEAR,-2);
            System.out.println(date2.getTime().toLocaleString());
            
            // 4.补充方法 getActualMaximum() 获取时间最大、最小值
            // 获取 当月的最大,最小值
            int max = date2.getActualMaximum(Calendar.DATE);
            int min = date2.getActualMinimum(Calendar.DATE);
            System.out.println(max);
            System.out.println(min);
        }
    }
    
    • 运行结果
    1. DateFormat 类
    • DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
    • 将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
    • 在创建 DateFormat 对象时不能使用 new 关键字,而应该使用 DateFormat 类中的静态方法 getDateInstance(),示例代码如下:
    DateFormat df = DateFormat.getDatelnstance();
    
    • 常用方法
    方法 描述
    String format(Date date) 将 Date 格式化日期/时间字符串
    Calendar getCalendar() 获取与此日期/时间格式相关联的日历
    static DateFormat getDateInstance() 获取具有默认格式化风格和默认语言环境的日期格式
    static DateFormat getDateInstance(int style) 获取具有指定格式化风格和默认语言环境的日期格式
    static DateFormat getDateInstance(int style, Locale locale) 获取具有指定格式化风格和指定语言环境的日期格式
    static DateFormat getDateTimeInstance() 获取具有默认格式化风格和默认语言环境的日期/时间 格式
    static DateFormat getDateTimeInstance(int dateStyle,int timeStyle) 获取具有指定日期/时间格式化风格和默认语言环境的 日期/时间格式
    static DateFormat getDateTimeInstance(int dateStyle,int timeStyle,Locale locale) 获取具有指定日期/时间格式化风格和指定语言环境的 日期/时间格式
    static DateFormat getTimeInstance() 获取具有默认格式化风格和默认语言环境的时间格式
    static DateFormat getTimeInstance(int style) 获取具有指定格式化风格和默认语言环境的时间格式
    static DateFormat getTimeInstance(int style, Locale locale) 获取具有指定格式化风格和指定语言环境的时间格式
    void setCalendar(Calendar newCalendar) 为此格式设置日历
    Date parse(String source) 将给定的字符串解析成日期/时间

    实例:

    package com.base.demo05;
    
    import java.text.DateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    public class Demo04 {
        public static void main(String[] args) {
            DateFormat df1 = DateFormat.getDateInstance();
            DateFormat df2 = DateFormat.getDateTimeInstance();
            DateFormat df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,
                    new Locale("zh", "CN"));
            DateFormat df4 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,
                    DateFormat.ERA_FIELD,new Locale("zh",
                    "CN"));
            System.out.println(df1.format(new Date()));
            System.out.println(df2.format(new Date()));
            System.out.println(df3.format(new Date()));
            System.out.println(df4.format(new Date()));
        }
    }
    

    运行结果:

    1. SimpleDateFormat 类
    • SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
    • 进行格式化(日期→文本)、解析(文本→日期)
    • 常用的时间模式字母
    字母 日期或时间 示例
    y 2021
    M 年中月份 08
    d 月中天数 10
    D 年份中的天数中天数 295
    H 一天中小时(0-23) 22
    h 一天中小时(1~12) 11
    m 分钟 16
    s 59
    S 毫秒 356
    E 星期几 星期四
    • 常用方法
    方法 描述
    public Date parse(String source)throws ParseException 将一个包含日期的字符串变为 Date 类型
    public final String format(Date date) 将一个 Date 类型按照指定格式变为String 类型
    • 实例
    package com.base.demo05;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Demo03 {
        public static void main(String[] args) {
            // 1.创建 SimpleDateFormat 对象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            // 2.创建时间
            Date date1 = new Date();
            // 3.格式化 format(date1) 把日期转换成字符串
            String str = sdf.format(date1);
            System.out.println(str);
            // 把字符串转换成日期  parse() 字符串要和创建对象的格式一致 此处会有异常,需要处理
            try {
                Date date2 = sdf.parse("2022-12-12 12:12:12");
                System.out.println(date2);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 运行结果
    • 格式未对应,报异常

    总结

    • 日期的操作,一般用的最多的就是对日期进行格式化,SimpleDateFormat 类用起来更方便。

    相关文章

      网友评论

        本文标题:Java 常用类 08. Java 日期操作类

        本文链接:https://www.haomeiwen.com/subject/mmiefrtx.html