JAVA日期的计算

目录

一、Date

二、Calendar

2.1Calendar与Date的相互转换

2.2获取时间的年、月、日、时、分、秒

2.3对时间的设置

2.4获取当前天数的最大值

2.5Calendar的时间运算


一、Date

import java.util.Date;

/**
 * Date日期创建
 */
public class TestDate {
    public static void main(String[] args) {

        //1、创建java.util.Date,可以表示一个具体的时间点
        Date date = new Date();
        System.out.println(date);

    }
}

运行结果:

JAVA日期的计算_第1张图片

这样的运行结果很难让我们中国人看懂,所有我们可以使用SimpleDateFormat进行转换成我们能看懂的日期

/**
 * Date日期创建
 */
public class TestDate {
    public static void main(String[] args) {

        //1、创建java.util.Date,可以表示一个具体的时间点
        Date date = new Date();
        System.out.println(date);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sdf.format(date);
        System.out.println(format);

    }
}

运行结果:

JAVA日期的计算_第2张图片

那么我怎么对Date的时间进行计算呢,我们就要用到Date本身的getTime()属性来获取Date底层维护的毫秒值


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

/**
 * Date日期创建
 */
public class TestDate {
    public static void main(String[] args) {

        //1、创建java.util.Date,可以表示一个具体的时间点
        Date date = new Date();
        System.out.println(date);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format1 = sdf.format(date);
        System.out.println(format1);

        long time = date.getTime();

        //Date内部维护了一个long值,
        // 这个long值是表示从1970年到目前为止的毫秒数
        System.out.println(time);

        //我们可以对这个毫秒值进行运行维护,比如说在这个基础上加上一天。
        time += 24*60*60*1000;

        //然后对我们处理后的long重新设置
        date.setTime(time);
        String format2 = sdf.format(date);
        System.out.println(format2);
    }
}

运行结果:

JAVA日期的计算_第3张图片

所有在Date中对时间的修改,只能从它底层维护的long值进行下手,十分的麻烦,本来我人就勤快,我肯定不会用这种方式来进行时间的计算。对于时间的计算,我更加倾向于Calendar

二、Calendar

Calendar它本身是一个抽象类,规定了操作时间的相关方法。Calendar它内部提供了一个静态方法getInstance,该方法可以根据当前系统所在地区获取一个适用的实现类,通常返回的就是GregorianCalendar。话不多说,上代码
import java.util.Calendar;

/**
 * 关于Calendar接口的使用
 */
public class DemoCalendar {
    public static void main(String[] args) {

        //默认创建出来就是当前的系统时间
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);

    }
}

运行结果:

JAVA日期的计算_第4张图片

比Date运行出来的结果还要难看,所以还是要进行转换,怎么进行转化,我们就要使用到

getTime()和setTime,它们分别有什么作用?

2.1Calendar与Date的相互转换

getTime():是将当前的Calendar所表示的时间以Date的形式返回======Calendar  ->  Date

setTime(date):是使当前Calendar表示给定的Date所表示的时间======Date  ->  Calendar


import java.util.Calendar;
import java.util.Date;

/**
 * 关于Calendar接口的使用
 */
public class DemoCalendar {
    public static void main(String[] args) {

        //默认创建出来就是当前的系统时间
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);

        //Calendar->Date
        Date date = calendar.getTime();
        System.out.println(date);

        //Date->Calendar
        calendar.setTime(date);


    }
}

运行结果:

2.2获取时间的年、月、日、时、分、秒

Calendar怎么进行运算,我们可以先看看,Calendar怎么获取当前的年、月、日、时、分、秒

可以用int get(int field)来获取给定时间分量所对应的值,时间分量应当使用Calendar提供的常量


import java.util.Calendar;
import java.util.Date;

/**
 * 关于Calendar接口的使用
 */
public class DemoCalendar {
    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();

        //获取年
        int year = calendar.get(Calendar.YEAR);
        System.out.println("当前年:"+year);

        //获取月 注意,月从0开始
        int moth = calendar.get(Calendar.MONTH);
        System.out.println("当前月:"+moth+1);

        //获取日
        /*
         * 跟天相关的常量
         * DATE         月中的天
         * DAY_OF_MONTH 月中的天
         * DAY_OF_WEEK  星期中的天
         * DAY_OF_YEAR  年中的天
         */
        int day = calendar.get(Calendar.DATE);
        System.out.println("本月的当前天:"+day);

        //获取时
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        System.out.println("当前时:"+hour);

        //获取分
        int m = calendar.get(Calendar.MINUTE);
        System.out.println("当前分钟:"+m);

        //获取秒
        int s = calendar.get(Calendar.SECOND);
        System.out.println("当前秒:"+s);

        System.out.println(year + "-" + (moth + 1) + "-" + day + " " + hour + ":" + m + ":" + s);
    }
}

运行结果:

JAVA日期的计算_第5张图片

2.3对时间的设置

当然,Calendar也提共了对于指定时间分量设置值得方法 void set(int field,int value)


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

/**
 * 关于Calendar接口的使用
 */
public class DemoCalendar {
    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();
        /**
         * 举个案例,设置一个时间值为2008-08-08 20:08:08
         */

        calendar.set(Calendar.YEAR, 2008);
        calendar.set(Calendar.MONTH, Calendar.AUGUST);
        calendar.set(Calendar.DAY_OF_MONTH, 8);
        calendar.set(Calendar.HOUR_OF_DAY, 20);
        calendar.set(Calendar.MINUTE, 8);
        calendar.set(Calendar.SECOND, 8);

        //将设置好的时间进行转化
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = sdf.format(calendar.getTime());
        System.out.println(format);

    }
}

运行结果

JAVA日期的计算_第6张图片

2.4获取当前天数的最大值

我们也可以通过Calendar提供的方法获取当年,当月的天数

/**
 * 获取给定时间分量所允许的最大值,参照日期为当前Calendar所表示的日期
 */
public class CalendarDemo {

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int days = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
        System.out.println("今年一共:" + days + "天");

        days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println("当月一共:" + days + "天");
    }
}

运行结果:

JAVA日期的计算_第7张图片

2.5Calendar的时间运算

好了,接下来我们来进行Calendar的时间运算


/**
 * 举个栗子:
 * 再过3个月零5天就是我爷爷80岁大寿
 * 请问,爷爷的出生日期?以及星期几?
 *
 */
public class DemoCalendar {
    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();
        //先算出爷爷的大寿
        calendar.add(Calendar.MONTH, 3);
        calendar.add(Calendar.DAY_OF_YEAR, 5);
        //开始计算爷爷的出生日期
        calendar.add(Calendar.YEAR, -80);
        //进行转化获取可观的时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");

        String format = sdf.format(calendar.getTime());
        System.out.println("爷爷的出生日期是:"+format);
        

    }
}

运行结果:

JAVA日期的计算_第8张图片

你可能感兴趣的:(java)