[java]察看两个日期间差多少秒/小时/天

Java 中Date类getTime()的方法返回从1970-1-1以来的毫秒数,这是下面函数运行的基础。

复制代码
package com.example.demo;

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

import org.apache.log4j.Logger;

public class TimeTest {
    private static Logger log = Logger.getLogger(TimeTest.class);
    
    public static void main(String[] args) {
        String startTime="2019-10-26 15:27:00";
        String endTime="2019-10-26 15:27:41";
        log.info(startTime+"与"+endTime+"之间差"+getSecondsBetween(startTime,endTime)+"秒");
        
        // 2019-9-31并不存在,这里证明SimpleDateFormat将字符串转数字不是那么让人放心
        startTime="2019-9-31 00:00:00";
        endTime="2019-10-01 00:00:00";
        log.info(startTime+"与"+endTime+"之间差"+getSecondsBetween(startTime,endTime)+"秒");
        
        // 2019-9-32也没报异常更让人担忧了
        startTime="2019-9-32 00:00:00";
        endTime="2019-10-02 00:00:00";
        log.info(startTime+"与"+endTime+"之间差"+getSecondsBetween(startTime,endTime)+"秒");
        
        startTime="2019-9-30 15:27:00";
        endTime="2019-10-26 15:27:41";
        log.info(startTime+"与"+endTime+"之间差"+getDaysBetween(startTime,endTime)+"天");
        
        startTime="2019-10-26 08:00:00";
        endTime="2019-10-26 15:41:41";
        log.info(startTime+"与"+endTime+"之间差"+getHoursBetween(startTime,endTime)+"小时");
    }
    
    /**
     * 两个时间之间差多少秒
     * @param startTime
     * @param endTime
     * @return
     */
    public static long getSecondsBetween(String startTime,String endTime) {
        SimpleDateFormat formatter =new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss");
        long seconds = 0L;
        
        try {
            Date startDate = formatter.parse(startTime);
            long msStart = startDate.getTime();
            
            Date endDate =  formatter.parse(endTime);
            long msEnd = endDate.getTime();

            seconds = ( msEnd-msStart ) / 1000 ;

        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        return seconds;
    }
    
    /**
     * 两个时间之间差多少天
     * @param startTime
     * @param endTime
     * @return
     */
    public static long getDaysBetween(String startTime,String endTime) {
        SimpleDateFormat formatter =new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss");
        long seconds = 0L;
        
        try {
            Date startDate = formatter.parse(startTime);
            long msStart = startDate.getTime();
            
            Date endDate =  formatter.parse(endTime);
            long msEnd = endDate.getTime();

            seconds = ( msEnd-msStart ) / (1000*60*60*24) ;

        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        return seconds;
    }
    
    /**
     * 两个时间之间差多少小时
     * @param startTime
     * @param endTime
     * @return
     */
    public static long getHoursBetween(String startTime,String endTime) {
        SimpleDateFormat formatter =new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss");
        long seconds = 0L;
        
        try {
            Date startDate = formatter.parse(startTime);
            long msStart = startDate.getTime();
            
            Date endDate =  formatter.parse(endTime);
            long msEnd = endDate.getTime();

            seconds = ( msEnd-msStart ) / (1000*60*60) ;

        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        return seconds;
    }
}
复制代码

输出:

 INFO [main] - 2019-10-26 15:27:00与2019-10-26 15:27:41之间差41秒
 INFO [main] - 2019-9-31 00:00:00与2019-10-01 00:00:00之间差0秒
 INFO [main] - 2019-9-32 00:00:00与2019-10-02 00:00:00之间差0秒
 INFO [main] - 2019-9-30 15:27:00与2019-10-26 15:27:41之间差26天
 INFO [main] - 2019-10-26 08:00:00与2019-10-26 15:41:41之间差7小时

--END-- 2019年10月26日15:45:14

posted @   逆火狂飙  阅读(805)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2016-10-24 Another MySQL daemon already running with the same unix socket的解决
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示