日期时间相关类

日期时间相关类Date,SimpleDateFormat,Calendar

Date类

构造函数

  • public Date()

    分配 Date 对象并初始化此对象,以表示分配它系统的时间(精确到毫秒)。

  • Date(long millisec)

    该参数是从1970年1月1日起的毫秒数。

常用方法

  • public long getTime()

    返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

  • public String toString()

    把此 Date 对象转换为以下形式的 String:
    dow mon dd hh:mm:ss zzz yyyy其中:
    dow 是星期几 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
    mon 是月份 (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)。
    dd 是一月中的某一天(01 至 31),显示为两位十进制数。
    hh 是一天中的小时(00 至 23),显示为两位十进制数。
    mm 是小时中的分钟(00 至 59),显示为两位十进制数。
    ss 是分钟中的秒数(00 至 61),显示为两位十进制数。
    zzz 是时区(并可以反映夏令时)。标准时区缩写包括方法 parse 识别的时区缩写。如果不提供时区信息,则 zzz 为空,即根本不包括任何字符。

    yyyy 是年份,显示为 4 位十进制数。

Demo

public static void main(String[] args){
        // 创建当前时间的Date
        Date date = new Date();
        System.out.println(date);

        // 当前时间的前一小时
        long time = date.getTime() - (1*60*60*1000);
        Date date1 = new Date(time);
        System.out.println(date1);
    }

Output:
Wed Jul 28 15:54:27 CST 2021
Wed Jul 28 14:54:27 CST 2021

SimpleDateFormat类

概述

DateFormat是Date的格式化工具,它能帮助我们格式化Date,进而将Date转换成我们想要的String字符串供我们使用

    public static void main(String[] args){

        /**
         *  y   :   年
         *  M   :   月
         *  d   :   日
         *  H   :   时
         *  m   :   分
         *  s   :   秒
         *
         *  2021年7月28日 16:08:00
         */

        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        
        // format:  将data对象 转换成字符串("yyyy年MM月dd日 HH:mm:ss")
        String text = format.format(new Date());
        System.out.println(text);
        
        // parse:   将字符串("yyyy年MM月dd日 HH:mm:ss")转换成data对象
        Date date = null;
        try {
            date = format.parse("2020年8月1日 10:00:00");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date);

        long time = (new Date().getTime() - date.getTime())/1000/60/60/24;
        System.out.println(time);
    }

Output:
2021年07月28日 16:21:37
Sat Aug 01 10:00:00 CST 2020
361
  • 已知一个人的出生日期,求年龄

    1. 用SimpleDateFormat类中的parse方法,将String类型的字符串转换成Date类型
    2. 和通过getTime()获得的当前时间做减法,得到活着的时间(单位:ms),在转换成天数

Calendar类

概念

可以方便的进行日期的计算,获取日期中的信息时考虑了时区等问题,而且在实现方式上也比Date类要复杂一些;

构造函数

Calendar类是一个抽象类,由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。

创建一个代表系统当前日期的Calendar对象

//默认是当前日期
Calendar c = Calendar.getInstance();

常用方法

Set

public final void set(int year,int month,int date)

  • Demo:
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12

利用字段类型设置

  • 如果只设定某个字段,例如日期的值,则可以使用如下set方法:

public void set(int field,int value)

  • Demo:
    public static void main(String[] args){
        Calendar c1 = Calendar.getInstance();
        // set方法一
        c1.set(2022,0,10);
        
        // set方法二
        c1.set(Calendar.YEAR, 2022);
        // 月份0-11,0相当于1月
        c1.set(Calendar.MONTH, 0);
        c1.set(Calendar.DATE, 10);
        
        // 年份
        int year = c1.get(Calendar.YEAR);
        // 一年中的第几天
        int day = c1.get(Calendar.DAY_OF_YEAR);

        System.out.println(year);
        System.out.println(day);
    }

Output:
2022
10

Add

Calendar c1 = Calendar.getInstance();

把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算

c1.add(Calendar.DATE, 10);

把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算

c1.add(Calendar.DATE, -10);
  • Demo:
    public static void main(String[] args){
        Calendar c1 = Calendar.getInstance();        
        c1.add(Calendar.MONTH, 3);
        System.out.println(c1.get(Calendar.MONTH));
        Date date = c1.getTime();
        System.out.println(date);
    }

Output:
9
Thu Oct 28 17:52:23 CST 2021

获取某字段的最大值

  • 返回当前日期,给定字段的最大值

int getActualMaximum(int field)

  • 返回当前日期,给定字段的最小值

int getActualMinimum(int field)

上一篇:Calendar工具类获取月初和月末时间


下一篇:Oozie时出现Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure?