精华内容
下载资源
问答
  • Java计算时间差、日期差总结

    万次阅读 多人点赞 2018-03-13 18:59:00
    Java计算时间差、日期差总结 最近工作中遇到需要计算时间差,搜索了几种计算时间差的方法,这里总结一下 1、java 7中的日历类Calendar Calendar类使用其静态的getInstance()方法获取一个日历实例,该实例为当前...

    Java计算时间差、日期差总结

    最近工作中遇到需要计算时间差,搜索了几种计算时间差的方法,这里总结一下

    1、java 7中的日历类Calendar

    Calendar类使用其静态的getInstance()方法获取一个日历实例,该实例为当前的时间;如果想改变时间,可以通过其setTime方法传入一个Date对象,即可获得Date对象所表示时间的Calendar对象

    /**
     *使用Calendar对象计算时间差,可以按照需求定制自己的计算逻辑
     * @param strDate
     * @throws ParseException
     */
    public static void calculateTimeDifferenceByCalendar(String strDate) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        Date date = formatter.parse(strDate);
    
        Calendar c1 = Calendar.getInstance();   //当前日期
        Calendar c2 = Calendar.getInstance();
        c2.setTime(date);   //设置为另一个时间
    
        int year = c1.get(Calendar.YEAR);
        int oldYear = c2.get(Calendar.YEAR);
    
        //这里只是简单的对两个年份数字进行相减,而没有考虑月份的情况
        System.out.println("传入的日期与今年的年份差为:" + (year - oldYear));
    }

    输出为:

    传入的日期与今年的年份差为:12

    2、java 8中的周期类Period

    通过调用Period类的静态方法between,传入两个待比较的LocalDate对象today与oldDate,得到的Period的对象p中就包含了today与oldDate两个日期相差的年、月、日信息,可以通过p.getYears()等方法取出

    /**
     * 使用java 8的Period的对象计算两个LocalDate对象的时间差,严格按照年、月、日计算,如:2018-03-12 与 2014-05-23 相差 3 年 9 个月 17 天
     * @param year
     * @param month
     * @param dayOfMonth
     */
    public static void calculateTimeDifferenceByPeriod(int year, Month month, int dayOfMonth) {
        LocalDate today = LocalDate.now();
        System.out.println("Today:" + today);
        LocalDate oldDate = LocalDate.of(year, month, dayOfMonth);
        System.out.println("OldDate:" + oldDate);
    
        Period p = Period.between(oldDate, today);
        System.out.printf("目标日期距离今天的时间差:%d 年 %d 个月 %d 天\n", p.getYears(), p.getMonths(), p.getDays());
    }

    输出为:

    Today:2018-03-13
    OldDate:2014-05-23
    目标日期距离今天的时间差:3 年 9 个月 18 天

    3、java 8中的Duration类

    Duration与Period相对应,Period用于处理日期,而Duration计算时间差还可以处理具体的时间,也是通过调用其静态的between方法,该方法的签名是between(Temporal startInclusive, Temporal endExclusive),因此可以传入两个Instant的实例(Instant实现了Temporal接口),并可以以毫秒(toMillis)、秒(getSeconds)等多种形式表示得到的时间差

    public static void calculateTimeDifferenceByDuration() {
        Instant inst1 = Instant.now();  //当前的时间
        System.out.println("Inst1:" + inst1);
        Instant inst2 = inst1.plus(Duration.ofSeconds(10));     //当前时间+10秒后的时间
        System.out.println("Inst2:" + inst2);
        Instant inst3 = inst1.plus(Duration.ofDays(125));       //当前时间+125天后的时间
        System.out.println("inst3:" + inst3);
    
        System.out.println("以毫秒计的时间差:" + Duration.between(inst1, inst2).toMillis());
    
        System.out.println("以秒计的时间差:" + Duration.between(inst1, inst3).getSeconds());
    }

    输出为:

    Inst1:2018-03-13T09:06:00.691Z
    Inst2:2018-03-13T09:06:10.691Z
    inst3:2018-07-16T09:06:00.691Z
    以毫秒计的时间差:10000
    以秒计的时间差:10800000

    4、java 8中的ChronoUnit类

    ChronoUnit的between方法签名为,between(Temporal temporal1Inclusive, Temporal temporal2Exclusive),需要注意的是,如果要以不同的单位展示时间差,between入参中的时间对象必须包含有对应的时间信息,否则会抛出java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit XXX的异常

    /**
     * 使用java 8的ChronoUnit,ChronoUnit可以以多种单位(基本涵盖了所有的,看源码发现竟然还有“FOREVER”这种单位。。)表示两个时间的时间差
     */
    public static void calculateTimeDifferenceByChronoUnit() {
        LocalDate startDate = LocalDate.of(2003, Month.MAY, 9);
        System.out.println("开始时间:" + startDate);
    
        LocalDate endDate = LocalDate.of(2015, Month.JANUARY, 26);
        System.out.println("结束时间:" + endDate);
    
        long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);
        System.out.println("两个时间之间的天数差为:" + daysDiff);
    //  long hoursDiff = ChronoUnit.HOURS.between(startDate, endDate);  //这句会抛出异常,因为LocalDate表示的时间中不包含时分秒等信息
    }

    输出为:

    开始时间:2003-05-09
    结束时间:2015-01-26
    两个时间之间的天数差为:4280

    5、传统的SimpleDateFormat类

    用SimpleDateFormat计算时间差的方法,网上找了一份,自己跑了一遍,可以使用,贴在下面

    /**
    * 用SimpleDateFormat计算时间差
    * @throws ParseException 
    */
    public static void calculateTimeDifferenceBySimpleDateFormat() throws ParseException {
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        /*天数差*/
        Date fromDate1 = simpleFormat.parse("2018-03-01 12:00");  
        Date toDate1 = simpleFormat.parse("2018-03-12 12:00");  
        long from1 = fromDate1.getTime();  
        long to1 = toDate1.getTime();  
        int days = (int) ((to1 - from1) / (1000 * 60 * 60 * 24));  
        System.out.println("两个时间之间的天数差为:" + days);
    
        /*小时差*/
        Date fromDate2 = simpleFormat.parse("2018-03-01 12:00");  
        Date toDate2 = simpleFormat.parse("2018-03-12 12:00");  
        long from2 = fromDate2.getTime();  
        long to2 = toDate2.getTime();  
        int hours = (int) ((to2 - from2) / (1000 * 60 * 60));
        System.out.println("两个时间之间的小时差为:" + hours);
    
        /*分钟差*/
        Date fromDate3 = simpleFormat.parse("2018-03-01 12:00");  
        Date toDate3 = simpleFormat.parse("2018-03-12 12:00");  
        long from3 = fromDate3.getTime();  
        long to3 = toDate3.getTime();  
        int minutes = (int) ((to3 - from3) / (1000 * 60));  
        System.out.println("两个时间之间的分钟差为:" + minutes);
    }

    输出为:

    两个时间之间的天数差为:11
    两个时间之间的小时差为:264
    两个时间之间的分钟差为:15840

    总结

    传统的SimpleDateFormat和Java 7中的Calendar在使用的时候需要自己写一个计算时间差的逻辑,比较麻烦,但是却比较灵活,方便根据自己具体的需求来定制(比如,我想两个日期的天数差15天就算满一个月,不满15天不算一个月,如2018-01-04到2018-02-20,算2个月的时间差);而Java 8中的几个计算时间差的类更加方便、精确,可以以不同的单位表示得到的时间差,但要注意几个类所包含的时间信息的区别:

    System.out.println(LocalDate.now());        //只包含日期信息
    System.out.println(LocalTime.now());        //只包含时间信息
    System.out.println(LocalDateTime.now());        //包含日期、时间信息

    输出为:

    2018-03-13
    17:13:26.134
    2018-03-13T17:13:26.135

    以上总结的几个方法只是个例子,具体使用的时候可能需要传入一个或者两个时间进行比较,可能会涉及到这些时间对象的相互转换,Instant、Date、LocalDate等等。。。我就不列举了。。。
    另外在使用SimpleDateFormat对String类型的日期进行parse的时候,如果传入的日期为:2017-08-60,这种错误的日期,Java默认会按照日期的信息对其进行转换,formatter.parse("2017-08-60");,得到的日期为2017-09-29,而如果不想进行这种转换,而直接将其判定为输入错误,则可以设置formatter.setLenient(false);,这时就会抛出java.text.ParseException异常了

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    formatter.setLenient(false);
    try {
        Date date = formatter.parse("2017-08-60");  //抛出转换异常
        System.out.println(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    展开全文
  • java 计算时间差

    2012-09-04 22:32:38
    多种方法实现时间差的计算,在此分享,共大家交流学习
  • java实现两个日期时间差算出分钟差

    千次阅读 2020-07-24 15:36:47
    java实现两个日期时间差算出分钟差 1.用代码实现两个时间的分钟差 // 获取时间 LocalDateTime time1 = "2020-06-08 09:28:45"; LocalDateTime time2 = "2020-08-01 16:34:56"; //计算出两个时间的差值 Duration ...

    java实现两个日期时间差算出分钟差

    1.用代码实现两个时间的分钟差

    // 获取时间
     LocalDateTime time1 = "2020-06-08 09:28:45";
     LocalDateTime time2 = "2020-08-01 16:34:56";
     //计算出两个时间的差值
     Duration differenceValue = Duration.between(time1 ,time2 );
     // 获取的是两个时间相差的分钟数,如果想要相差小时数就调用toHours()
    Long minutesTime = differenceValue .toMinutes();
    Long minutesTime = differenceValue .toHours();
    
    
    用sql实现两个时间差算出分钟差
    
    // UNIX_TIMESTAMP是将时间转化为时间戳,时间除以60是要转化为分钟时间戳
    // CAST是用来转类型的
      SELECT
      CAST(UNIX_TIMESTAMP(time1)/60 AS SIGNED) as time1,
      CAST(UNIX_TIMESTAMP(time2)/60 AS SIGNED) as time2
      FROM tableName;
    //拿到时间戳之后就可以直接运算了
    

    拿到两个时间的分钟差之后,可以根据时间的换算,得到自己想要的形式,下面这个工具类是根据分钟换算成以下的形式

      public static String translateTimeUtil(Long time){
            Long differTime = time;
            //两个时间戳相差多少分钟
            String dataTime ="";
            if (differTime >= 525600){
                int year = differTime.intValue()/525600;
                int day = (differTime.intValue()-525600*year)/1440;
                int hour =(differTime.intValue()-525600*year-1440*day)/60;
                dataTime = year + "年" +day + "天" + hour + "小时";
            }else {
                if (differTime >= 1440 ) {
                    int day = differTime.intValue() / 1440;
                    int hour = (differTime.intValue()-1440*day)/60;
                    dataTime = day + "天" + hour + "小时";
                }else if (differTime <60){
                    dataTime = differTime + "分钟";
                } else {
                    int hour = differTime.intValue() /60;
                    int minute = differTime.intValue()%60;
                    dataTime = hour + "小时" + minute +"分钟";
                }
            }
            return dataTime ;
        }
    
    展开全文
  • 另外,System类的静态函数public long currentTimeMillis()可以获得系统当前时间,距离1970年1月1日8点的时间差,返回的是毫秒数。 一般将Data类型转换成Calendar类型方便使用。 转换函数: //Date类型转Calendar...

    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月前
    
    展开全文
  • 主要介绍了Java获取时间差(天数差,小时差,分钟差)代码示例,使用SimpleDateFormat来实现的相关代码,具有一定参考价值,需要的朋友可以了解下。
  • java实现两个日期的时间差

    万次阅读 2018-08-19 22:46:40
    package com.yu.bai.date; import java.util.Calendar; import java.util.Date; public class TestDate2 { public static void main(String[] args) { //创建一个日期 Calendar calendar = Calenda...
    package com.yu.bai.date;
    
    import java.util.Calendar;
    import java.util.Date;
    
    public class TestDate2 {
    
        public static void main(String[] args) {
            //创建一个日期
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DAY_OF_MONTH, -3);
            Date date = calendar.getTime();
            System.out.println(date);//此时获取的是当前时间往前推三天的日期
    
            //调用方法,获得两个日期之间的时间差
            double days = getDistanceTime(date,new Date());
            System.out.println(days);
        }
    
        //计算时间差,以天数为单位。如:2018-08-08 和 2018-08-05 相差3天   
        public static int getDistanceTime(Date startTime, Date endTime) {
            int days = 0;
            long time1 = startTime.getTime();
            long time2 = endTime.getTime();
    
            long diff;
            if (time1 < time2) {
                diff = time2 - time1;
            } else {
                diff = time1 - time2;
            }
            days = (int) (diff / (24 * 60 * 60 * 1000));
            return days;
        }
    
        //计算时间差,以小时为单位。如:2018-08-08 和 2018-08-07 相差24h    
        public double getDistanceTime2(Date startTime, Date endTime) {
            double hour = 0;
            long time1 = startTime.getTime();
            long time2 = endTime.getTime();
    
            long diff;
            if (time1 < time2) {
                diff = time2 - time1;
            } else {
                diff = time1 - time2;
            }
            hour = (diff / (60 * 60 * 1000));
            return hour;
        }
    }
    
    展开全文
  • Java实现 LeetCode 539 最小时间差(单位转换)

    万次阅读 多人点赞 2020-03-25 09:53:20
    539. 最小时间差 给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。 示例 1: 输入: [“23:59”,“00:00”] 输出: 1 备注: 列表中时间数在 2~20000 之间。 每个时间...
  • Java实现数列

    千次阅读 2018-07-09 11:36:52
    public int getCha( int n ) { return 1+(n-1)*3; }      
  • 后端:Java 计算时间差

    万次阅读 2019-01-31 09:55:59
    * 用SimpleDateFormat计算时间差 * @throws ParseException */ public static void calculateTimeDifferenceBySimpleDateFormat() throws ParseException { SimpleDateFormat simpleFormat = new ...
  • Java计算时间差(两个时间相减)

    万次阅读 多人点赞 2018-06-15 16:14:56
    原文地址:https://blog.csdn.net/kouwoo/article/details/42618513在Android开发或者Java学习中,经常要求两个时间差比如说:现在是 :2004-03-26 13:31:40过去是:2004-01-02 11:30:24我现在要获得两个日期差...
  • 网上有很多博文是讲如何获取时间差的,我看了一下,多数是使用Calendar类来实现,但是都讲得比较乱,在这里我用SimpleDateFormat来实现,比较简单,我认为比较适合拿来用。 首先我们先初始化我们的...
  • Java实现第十届蓝桥杯等数列

    万次阅读 多人点赞 2019-07-27 22:20:22
    时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 【问题描述】 数学老师给小明出了一道等数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。 现在给出这 N 个整数,小明想知道包含这 N...
  • java中Date计算时间差

    千次阅读 2020-07-17 12:42:14
    1、java 7中的日历类Calendar Calendar类使用其静态的... *使用Calendar对象计算时间差,可以按照需求定制自己的计算逻辑 * @param strDate * @throws ParseException */ public static void calculateTimeD
  • java实现时间转UTC格式

    千次阅读 2020-01-03 10:21:53
    时间标准简介 UTC(世界标准时间) 协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps Universel Coordonné”而来),是最主要的世界时间标准,其以原子时...
  • 计算时间差,还剩下xx天xx小时xx分xx秒代码: Date currDate = new Date(System.currentTimeMillis());
  • java实现10种排序算法

    万次阅读 多人点赞 2021-05-06 21:59:15
    import java.util.Arrays; //冒泡排序 public class BubbleSort_01 { public static void main(String[] args) { int a[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; //记录比较次数 int count=0; //i=0...
  • java时间差得到年月日

    千次阅读 2016-04-28 09:55:02
    package action; import java.util.Calendar; import java.util.Date; import util.Util;... * 创建时间:2016-4-28日 -上午09:44:00 * @version 1.0.0 * */ public class Test01 { /*...
  • java实现Calendar求两个日期

    千次阅读 2018-10-23 21:40:02
    简单实现一下两个calendar日期之间的时间差。 可用于查询某个时间段注册的新用户,或者某个时间段内销售总额。 看下代码。 package csdn; import java.util.Calendar; public class Calendar_demo { public ...
  • java8中获取两个时间的时间差

    万次阅读 2019-02-20 14:16:14
    工作中我们经常会想查看一个方法执行的性能,就会通过在方法入口和出口处记算一下时间差值,像下面代码这样: long start = System.currentTimeMillis(); //business code Thread.sleep(1000); long over = ...
  • 数据结构之Java实现两个随机数组合并进行排序

    万次阅读 多人点赞 2021-09-09 20:36:09
    Java实现两个随机数组合并进行排序 前言: ​ 小Du猿结束"996ICP"CRUD开发工作生活,重新进入了校园学习生活。本周开始了第二周数据结构的基础知识学习,大爱向老师的上课方式,用生动形象的方式讲解抽象概念,但一...
  • 常用统计算法JAVA实现 - 极(04)

    千次阅读 2019-01-15 15:58:36
    * * @描述:集中趋势量数:极(不包含) &lt;br/&gt; * * @方法名: range &lt;br/&gt; * * @param in &lt;br/&gt; * * @return &lt;br/&gt; * * @返回类型 double &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,211
精华内容 70,084
关键字:

java实现时间差

java 订阅