zoukankan      html  css  js  c++  java
  • 计算两个时间之间的天数

    在处理业务中,经常会对数据的进行一些统计,比如:在两个时间范围内,不同类型的数据天数的占比,这样就需要统计两个时间之间的天数,这里记录两种求两时间之间天数的方式:

    /**
    * 实现求 时间1 --- 时间2 之间的天数。
    * 方法一:
    * 通过Calendar类的日期比较
    * 1,日期是跨年份的
    * 2,年份有闰年和平年
    * 思路:
    * 1,通过SimpleDateFormat初始化时间时刻
    * 2,Date对象的方法大多过时,我们用Calendar类来计算
    * 3,Calendar中的get方法可以获取各个字段的值,例如:DAY_OF_YEAR 一年里当前年时刻的天数
    * 4,计算两个年份之间相差多少年
    * 5,判断平年还是闰年 平年加366天 闰年加365天
    * 6,年份的天数加上当前年时刻天数的差得到结果。
    *
    * 方法二:
    * Date类的gettime方法返回当前对象一个long值 (单位毫秒)
    * 思路:
    * 1,分别计算两个对象的long值。
    * 2,再用long值想减。
    * 3,用相减的毫秒换算成天数。
    *
    */

    package com.iot.consumer.agms.controller.evaluate;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    /**
     * Created by IntelliJ IDEA
     * 这是一个神奇的Class
     *
     * @author zhz
     * @date 2019/12/6 13:40
     */
    public class TestDate {
    
        public static void main(String[] args) {
            String dateStr1 = "2019-02-01";
            String dateStr2 = "2019-12-06";
            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date date1 = format1.parse(dateStr1);
                Date date2 = format2.parse(dateStr2);
    
                System.out.println("2019年02月1日和2019年12月6日相差了:"+differentDays(date1,date2)+"天!");
                System.out.println(differentDayMillisecond(date1,date2));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    
         static int differentDays(Date date1,Date date2){
            Calendar calendar1 = Calendar.getInstance();
            calendar1.setTime(date1);
            Calendar calendar2 = Calendar.getInstance();
            calendar2.setTime(date2);
    
            int day1 = calendar1.get(Calendar.DAY_OF_YEAR);
    //        System.out.println(day1);
            int day2 = calendar2.get(Calendar.DAY_OF_YEAR);
    //        System.out.println(day2);
            int year1 = calendar1.get(Calendar.YEAR);
            int year2 = calendar2.get(Calendar.YEAR);
    
            if (year1 != year2)  //不同年
            {
                int timeDistance = 0;
                for (int i = year1 ; i < year2 ;i++){ //闰年
                    if (i%4==0 && i%100!=0||i%400==0){
                        timeDistance += 366;
                    }else { // 不是闰年
                        timeDistance += 365;
                    }
                }
                return  timeDistance + (day2-day1);
            }else{// 同年
                return day2-day1;
            }
    
        }
    
        static int differentDayMillisecond (Date date1,Date date2)
        {
    
    
            int day = (int)((date2.getTime()-date1.getTime())/(3600*1000*24));
            return day;
        }
    
    }

  • 相关阅读:
    (转)flash的Socket通讯沙箱和安全策略问题
    as3 页游中,新手指导中,屏蔽所有交互对象,但除了指定交互对象可用的方法【转http://blog.csdn.net/linjf520/article/details/9450945】
    位运算 (&|)与--或 一位数组表示多种意思~~ 与--或
    SQL语句
    stage.width/height和stage.stageWidth/stageHeight的区别
    解决Mac OS Adobe Flash Builder 4.7 java heap space 问题【转】
    一个loader加载多个swf
    加濾鏡效果GlowTween
    [AS3]as3用ByteArray来对SWF文件编码加密实例参考
    屏幕震动效果
  • 原文地址:https://www.cnblogs.com/wdzhz/p/11994831.html
Copyright © 2011-2022 走看看