使用 Calendar 计算时间

22 篇文章 0 订阅

使用 Calendar 计算时间

一. 类型转换

1.1 Date → Calendar
public Calendar date2Calendar(Date date){
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar;
}
1.2 Calendar → Date
public Date calendar2Date(Calendar calendar){
    return calendar.getTime();
}

二. 时间计算

2.1 ?毫秒
/*
 * 计算两个日期之间的差值:
 *      日期1:2019-12-31 12:30:12
 *      日期2:2020-01-01 13:31:13
 */
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();

// 手动设置时间
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);

long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();

long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;
System.out.println("相差:" + differenceInMills + "(毫秒)");

代码执行结果:

相差: 90061000(毫秒)

Process finished with exit code 0

2.2 ?秒
/*
 * 计算两个日期之间的差值:
 *      日期1:2019-12-31 12:30:12
 *      日期2:2020-01-01 13:31:13
 */
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();

// 手动设置时间
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);

long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;

//1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;
System.out.println("相差: " + differenceInSecond + "(秒)");

代码执行结果:

相差: 90061(秒)

Process finished with exit code 0

2.3 ?分钟
/*
 * 计算两个日期之间的差值:
 *      日期1:2019-12-31 12:30:12
 *      日期2:2020-01-01 13:31:13
 */
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();

// 手动设置时间
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);

// 计算毫秒差值
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;

// 1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;

// 1分钟 = 60秒
long differenceInMinute = differenceInSecond / 60;
System.out.println("相差: " + differenceInMinute + "(分钟)");

代码执行结果:

相差: 1501(分钟)

Process finished with exit code 0

2.4 ?小时
/*
 * 计算两个日期之间的差值:
 *      日期1:2019-12-31 12:30:12
 *      日期2:2020-01-01 13:31:13
 */
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();

// 手动设置时间
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);

// 计算毫秒差值
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;

// 1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;

// 1分钟 = 60秒
long differenceInMinute = differenceInSecond / 60;

// 1小时 = 60分钟 = 3600秒
long differenceInHour = differenceInSecond / 3600;
System.out.println("相差: " + differenceInHour + "(小时)");

代码执行结果:

相差: 25(小时)

Process finished with exit code 0

2.5 ? 时?分?秒?毫秒
/*
 * 计算两个日期之间的差值:
 *      日期1:2019-12-31 12:30:12
 *      日期2:2020-01-01 13:31:13
 */
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();

// 手动设置时间
startCalendar.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
endCalendar.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
startCalendar.set(Calendar.MILLISECOND, 0);
endCalendar.set(Calendar.MILLISECOND, 0);

// 计算毫秒差值
long startCalendarTimeInMills = startCalendar.getTimeInMillis();
long endCalendarTimeInMills = endCalendar.getTimeInMillis();
long differenceInMills = endCalendarTimeInMills - startCalendarTimeInMills;

// 1秒 = 1000毫秒
long differenceInSecond = differenceInMills / 1000;

// 1分钟 = 60秒
long differenceInMinute = differenceInSecond / 60;

// 1小时 = 60分钟 = 3600秒
long differenceInHour = differenceInSecond / 3600;

System.out.println("相差: " +
        (differenceInSecond / 3600) + "小时" +
        (differenceInSecond % 3600) / 60 + "分钟" +
        (differenceInSecond % 3600 % 60) + "秒" +
        (differenceInMills % 1000) + "毫秒");

代码执行结果:

相差: 25小时1分钟1秒0毫秒

Process finished with exit code 0

三、时间比较

3.1 两个日期相差几天?
public static void main(String[] args) {

    /*
     * 计算两个日期之间的差值:
     *      日期1:2019-12-31 12:30:12
     *      日期2:2020-01-01 13:31:13
     */
    Calendar calendar1 = Calendar.getInstance();
    Calendar calendar2 = Calendar.getInstance();

    calendar1.set(2019, Calendar.DECEMBER, 31, 12, 30, 12);
    calendar2.set(2020, Calendar.JANUARY, 1, 13, 31, 13);
    calendar1.set(Calendar.MILLISECOND, 0);
    calendar2.set(Calendar.MILLISECOND, 0);

    // 1.获取日期毫秒数
    long timeInMills1 = calendar1.getTimeInMillis();
    long timeInMills2 = calendar2.getTimeInMillis();

    // 2.计算:本日期是自1900年以来的第几天?
    long days1 = timeInMills1 / 1000 / 3600 / 24;
    long days2 = timeInMills2 / 1000 / 3600 / 24;
    System.out.println("日期 " + calendar1.getTime() + 
                       " 是1900年以来的第" + days1 + "天");
    System.out.println("日期 " + calendar2.getTime() + 
                       " 是1900年以来的第" + days2 + "天");

    // 3.计算日期相差的天数
    long differenceDays = days2 - days1;
    System.out.println("两个日期相差:" + differenceDays + "天");
}

代码执行结果:

日期 Tue Dec 31 12:30:12 CST 2019 是1900年以来的第18261天
日期 Wed Jan 01 13:31:13 CST 2020 是1900年以来的第18262天
两个日期相差:1天

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值