Java实现某一时间与当前时间的时间差

本文详细讲解了Java中Date和Calendar类的使用,包括无参构造函数获取当前时间,以及如何将Date转换为Calendar以便获取更丰富的日期信息。重点展示了如何计算两个特定时间之间的最大时间差,并以年月日时分秒形式输出。
摘要由CSDN通过智能技术生成

java中和时间有关的类包括Data类和Canlendar类

Data类

1、使用无参构造函数

Data nowTime = new Date()
#输出的就是当前的时间

2、带参构造函数这里不再说明

另外,System类的静态函数public long currentTimeMillis()可以获得系统当前时间,距离1970年1月1日8点的时间差,返回的是毫秒数。

一般将Data类型转换成Calendar类型方便使用。

转换函数:
//Date类型转Calendar类型
    public static Calendar dataToCalendar(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.setTime(date);
        return calendar;
    }

Calendar

初始化calendar实例

Calendar calendar = Calendar.getInstance();

通过calendar可以获得时间的年月日等信息。

具体代码如下:

实现功能:对一特定时间和当前时间的时间差,以最大的时间差输出,次序为:年、月、日、时、分、秒。

主函数:
		StringTokenizer fenxi = new StringTokenizer(getTime("2020-07-29 11:37:17"),"|");
        int[] result = new int[2];
        int i = 0;
        while (fenxi.hasMoreTokens()){
            result[i] = Integer.parseInt(fenxi.nextToken());
            i++;
        }
        String[] time_list = {"年","月","天","小时","分钟","秒"};
        System.out.println(""+result[0]+time_list[result[1]]+"前");
public static String getTime(String log_time){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date time_now = new Date();
        long diff = 0;
        String CountTime = "";
        int year=0,month=0,day=0;
        long hours=0,minutes=0,s=0;
        try {
            Date time_ago = df.parse(log_time);
            diff = time_now.getTime() - time_ago.getTime();
            Calendar  currentTimes =dataToCalendar(time_now);//当前系统时间转Calendar类型
            Calendar  pastTimes =dataToCalendar(time_ago);//查询的数据时间转Calendar类型
            year = currentTimes.get(Calendar.YEAR) - pastTimes.get(Calendar.YEAR);//获取年
            month = currentTimes.get(Calendar.MONTH) - pastTimes.get(Calendar.MONTH);
            day = currentTimes.get(Calendar.DAY_OF_MONTH) - pastTimes.get(Calendar.DAY_OF_MONTH);
            if (month < 0) {
                month = (month + 12) % 12;//获取月
                year--;
            }
            if (day < 0) {
                month -= 1;
                currentTimes.add(Calendar.MONTH, -1); //减一个月
                day = day + currentTimes.getActualMaximum(Calendar.DAY_OF_MONTH);//获取日
            }
            long days = diff / (1000 * 60 * 60 * 24);
            hours = (diff-days*(1000 * 60 * 60 * 24))/(1000* 60 * 60); //获取时
            minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60);  //获取分钟
            s=(diff/1000-days*24*60*60-hours*60*60-minutes*60);//获取秒
            CountTime=""+year+"年"+month+"月"+day+"天"+hours+"小时"+minutes+"分"+s+"秒";
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(CountTime);
        return year != 0 ? ""+year+"|"+0 :
               month != 0 ? ""+month+"|"+1 :
               day != 0 ? ""+day+"|"+2 :
               hours != 0 ? ""+hours+"|"+3 :
               minutes != 0 ? ""+minutes+"|"+4 : ""+s+"|"+5 ;
    }
输出结果:2月前
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值