欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算两个日期之间的时间段秒数差

程序员文章站 2022-05-09 15:23:54
...
                          ## 计算两个日期之间的时间

package com.yb.mybatis;

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

/**

  • 计算两个时间字段之间的秒

  • 两个字段标准格式是:yyyy-MM-dd HH:mm:ss.xxxx

  • @autor dyl

  • @Date 2020/10/19
    */
    public class utiltime {

    public static final SimpleDateFormat datetimeFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
    public static final SimpleDateFormat date_sdf = new SimpleDateFormat(“yyyy-MM-dd”);

    /**
    *用来测试的主方法
    */

    public static void main(String[]args) throws ParseException {
    int secondetime = secondetime(“2012-01-11 10:30:40.252525”, “2012-01-11 10:30:59.25”);
    System.out.println(“这个时间段中间有:”+secondetime+“秒”);
    }

    /**
    *

    • @param fstarttime

    • @param fendtime

    • @return 返回有多少秒

    • @throws ParseException
      */
      public static int secondetime(String fstarttime,String fendtime)throws ParseException {
      String gettime1= Stringbuf(fstarttime);//前面时间
      String gettime2= Stringbuf(fendtime);//后面时间
      List dateList = getDateList(gettime1, gettime2);
      int r=dateList.size()-1;
      Date firstTime = datetimeFormat.parse(gettime1); //当前系统时间
      Date currentTime = datetimeFormat.parse(gettime2); //查询的数据时间
      String date1 = datetimeFormat.format(firstTime);//前面时间
      String str1=date1.substring(11,13);//截取的是时
      String s1=date1.substring(14,16);//截取的是分
      String f1=date1.substring(17,19);//截取的时秒
      String date = datetimeFormat.format(currentTime);//后面时间
      String str=date.substring(11,13);
      String s=date.substring(14,16);
      String f=date.substring(17,19);

      String time = getTime(currentTime,firstTime);//时分秒
      String [] t=time.split("????;
      int value1=0;
      int value2=0;
      if(Integer.valueOf(t[0])!=0) {
      value1 = Integer.valueOf(t[0])6060;
      }
      if(Integer.valueOf(t[1])!=0) {
      value2=Integer.valueOf(t[1])*60;
      }
      int value3=Integer.valueOf(t[2]);
      if(Integer.valueOf(str)<Integer.valueOf(str1)||Integer.valueOf(str)==Integer.valueOf(str1)&&Integer.valueOf(s)<Integer.valueOf(s1)||Integer.valueOf(f)<Integer.valueOf(f1)&&Integer.valueOf(s)<=Integer.valueOf(s1)&&Integer.valueOf(str)<=Integer.valueOf(str1)){
      r=r-1;
      }
      int second = second®;//这个年有多少秒
      int zong=value1+value2+value3+second;
      return zong;
      }

    /**
    *

    • @param str
    • @return 返回截取的字符串
      */
      public static String Stringbuf(String str){
      String d = str.substring(0, 19);
      return d;
      }

    /**
    *

    • @param currentTime
    • @param firstTime
    • @return 获取时间差方法显示时:分:秒
      /
      public static String getTime(Date currentTime,Date firstTime){
      long diff = currentTime.getTime() - firstTime.getTime();//这样得到的差值是微秒级别
      Calendar currentTimes =dataToCalendar(currentTime);//当前系统时间转Calendar类型
      Calendar firstTimes =dataToCalendar(firstTime);//查询的数据时间转Calendar类型
      int day = currentTimes.get(Calendar.DAY_OF_MONTH) - firstTimes.get(Calendar.DAY_OF_MONTH);
      if (day < 0) {
      currentTimes.add(Calendar.MONTH, -1);
      }
      long days = diff / (1000 * 60 * 60 * 24);
      long hours = (diff-days
      (1000 * 60 * 60 * 24))/(1000* 60 * 60); //获取时
      long minutes = (diff-days*(1000 * 60 * 60 * 24)-hours*(1000* 60 * 60))/(1000* 60); //获取分钟
      long s=(diff/1000-days246060-hours6060-minutes60);//获取秒
      String CountTime=hours+":"+minutes+":"+s;
      return CountTime;
      }

    /**
    *

    • @param date
    • @return Date类型转Calendar类型
      */

    public static Calendar dataToCalendar(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar;
    }

    /**
    *

    • @param a
    • @return 有多少天就计算多少秒
      /
      private static int second(int a){
      int b=a
      246060;
      return b;
      }

    /**
    *

    • @return 转换日期格式
      */
      public static Calendar getCalendar() {
      return Calendar.getInstance();
      }

    public static String formatDate(long millis) {
    return date_sdf.format(new Date(millis));
    }

    /**
    *

    • @param startDateStr
    • @param endDateStr
    • @return 返回数组从startDateStr到endDateStr日期
    • @throws ParseException
      */
      public static List getDateList(String startDateStr, String endDateStr) throws ParseException {
      List result = new ArrayList<>();
      // 将 str时间转为 Date 类型
      Date startDate = datetimeFormat.parse(startDateStr);
      Date endDate = datetimeFormat.parse(endDateStr);
      // 这里主要借助于Calendar 对于两个时间的比较,来存储
      Calendar startCal = getCalendar();
      startCal.setTime(startDate);
      Calendar endCal = getCalendar();
      endCal.setTime(endDate);
      do {
      result.add(formatDate(startCal.getTimeInMillis()));
      startCal.add(Calendar.DAY_OF_YEAR, 1);
      } while (startCal.before(endCal));
      // 因为精细度到 日期,所有最后一个日期难以处理,需要单独来做
      String end = formatDate(endCal.getTimeInMillis());
      if(!result.contains(end)) {
      result.add(end);
      }
      return result;
      }

}

计算两个日期之间的时间段秒数差