`
h248980496
  • 浏览: 7271 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

日期之间的差值计算

阅读更多
两个日期做减法,返回类型是Object,参数中可以定义返回类型的具体类型,可以定义差多少天,差多少小时等等,基本上用到可能性不是太大,但是相对还是比较好用的


import java.math.BigDecimal;
import java.util.Date;

import org.apache.commons.lang.StringUtils;

/**
 * 
 * desc: 日期差值计算工具类
 * 
 * @author <a href="mailto:yourmail">Hegege</a>
 * @version CVS $Revision: 1.1 $ $Date: 2005/12/05 08:42:21 $
 */
public class DateOperationUtil {
 
 public static final String OUTPUT_TYPE_STRING = "String";
 public static final String OUTPUT_TYPE_DOUBLE = "Double";
 public static final String OUTPUT_TYPE_FLOAT = "Float";
 public static final String OUTPUT_TYPE_INTEGER = "Integer";
 
 public static final String CALCULATE_TYPE_DAY = "day";
 public static final String CALCULATE_TYPE_HOUR = "hour";
 public static final String CALCULATE_TYPE_MINUTE = "minute";
 public static final String CALCULATE_TYPE_SECOND = "second";
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  Date d1 = new Date();
  d1.setYear(2011-1900);
  d1.setMonth(11-1);
  d1.setDate(27);
  d1.setHours(23);
  d1.setMinutes(55);
  d1.setSeconds(35);
  Date d2 = new Date();
  d2.setYear(2011-1900);
  d2.setMonth(12-1);
  d2.setDate(3);
  d2.setHours(12);
  d2.setMinutes(11);
  d2.setSeconds(1);
//  System.out.println(doDateMinusValue(d1, d2, OUTPUT_TYPE_STRING, 3, CALCULATE_TYPE_MINUTE));
  System.out.println(doDateMinusValue(d1, d2, OUTPUT_TYPE_INTEGER, 3, CALCULATE_TYPE_HOUR));

 }
 
 /**
  * 两个日期的差值,d2-d1
  * returnType:返回类型,默认为string
  * f:小数位数,-1为默认全部(建议f不大于8)默认为2
  * calculateType:换算单位(天,小时,分钟,秒)默认为天
  */
 public static Object doDateMinusValue(Date d1,Date d2,String returnType,int f,String calculateType){
  
  long l1 = d1.getTime();
  long l2 = d2.getTime();
  long ll = l2-l1;
  if(ll>=0){
   if(StringUtils.isNotEmpty(returnType)){
    if(OUTPUT_TYPE_STRING.equals(returnType)){
     return returnString(f, calculateType, ll);
    }else if(OUTPUT_TYPE_DOUBLE.equals(returnType)){
     return returnDouble(calculateType, ll);
    }else if(OUTPUT_TYPE_FLOAT.equals(returnType)){
     return returnFloat(calculateType, ll);
    }else if(OUTPUT_TYPE_INTEGER.equals(returnType)){
     return returnInteger(calculateType, ll);
    }else{
     
    }
   }else{
    
   }
  }else{
   return null;
  }
  
  return returnType;
  
 }

 private static Object returnInteger(String calculateType, long l) {
  //如果是按照整数来计算,那么应该是有尾数就进一位,而不是四舍五入或者只去整数位
  if(StringUtils.isNotEmpty(calculateType)){
   if(CALCULATE_TYPE_DAY.equals(calculateType)){
    return returnInteger(l, 1000*60*60*24l);
   }else if(CALCULATE_TYPE_HOUR.equals(calculateType)){
    return returnInteger(l, 1000*60*60l);
   }else if(CALCULATE_TYPE_MINUTE.equals(calculateType)){
    return returnInteger(l, 1000*60l);
   }else if(CALCULATE_TYPE_SECOND.equals(calculateType)){
    return returnInteger(l, 1000l);
   }else{
    return returnInteger(l, 1000*60*60*24l);
   }
  }else{
   return returnInteger(l, 1000*60*60*24l);
  }
 }

 private static Object returnFloat(String calculateType, long ll) {
  if(StringUtils.isNotEmpty(calculateType)){
   if(CALCULATE_TYPE_DAY.equals(calculateType)){
    float ff = ll/(float)(1000*60*60*24);
    return Float.valueOf(ff);
   }else if(CALCULATE_TYPE_HOUR.equals(calculateType)){
    float ff = ll/(float)(1000*60*60);
    return Float.valueOf(ff);
   }else if(CALCULATE_TYPE_MINUTE.equals(calculateType)){
    float ff = ll/(float)(1000*60);
    return Float.valueOf(ff);
   }else if(CALCULATE_TYPE_SECOND.equals(calculateType)){
    float ff = ll/(float)(1000);
    return Float.valueOf(ff);
   }else{
    float ff = ll/(float)(1000*60*60*24);
    return Float.valueOf(ff);
   }
  }else{
   float ff = ll/(float)(1000*60*60*24);
   return Float.valueOf(ff);
  }
 }

 private static Object returnDouble(String calculateType, long l) {
  if(StringUtils.isNotEmpty(calculateType)){
   if(CALCULATE_TYPE_DAY.equals(calculateType)){
    return returnDouble(l, 1000*60*60*24l);
   }else if(CALCULATE_TYPE_HOUR.equals(calculateType)){
    return returnDouble(l, 1000*60*60l);
   }else if(CALCULATE_TYPE_MINUTE.equals(calculateType)){
    return returnDouble(l, 1000*60l);
   }else if(CALCULATE_TYPE_SECOND.equals(calculateType)){
    return returnDouble(l, 1000l);
   }else{
    return returnDouble(l, 1000*60*60*24l);
   }
  }else{
   return returnDouble(l, 1000*60*60*24l);
  }
 }

 private static Object returnString(int f, String calculateType, long l) {
  if(StringUtils.isNotEmpty(calculateType)){
   if(CALCULATE_TYPE_DAY.equals(calculateType)){
    return returnString(f, l, 1000*60*60*24l);
   }else if(CALCULATE_TYPE_HOUR.equals(calculateType)){
    return returnString(f, l, 1000*60*60l);
   }else if(CALCULATE_TYPE_MINUTE.equals(calculateType)){
    return returnString(f, l, 1000*60l);
   }else if(CALCULATE_TYPE_SECOND.equals(calculateType)){
    return returnString(f, l, 1000l);
   }else{
    return returnString(f, l, 1000*60*60*24l);
   }
  }else{//默认为天计算
   return returnString(f, l, 1000*60*60*24l);
  }
 }
 
 private static Double returnDouble(long l,long p){
  float ff = l/(float)(1000*60*60*24);
  BigDecimal bd = new BigDecimal(ff);
  double ddd = bd.doubleValue();
  return Double.valueOf(ddd);
 }
 private static String returnString(int f,long l,long p){
  float ff = l/(float)(p);
  BigDecimal bd = new BigDecimal(ff);
  String sss = bd.toEngineeringString();
  return formatString(f,sss);
 }
 private static Integer returnInteger(long l,long p){
  Float ff = l/(float)(1000*60*60*24);
  if(ff.floatValue()>Float.valueOf(ff.intValue()).floatValue()){
   return Integer.valueOf(ff.intValue()+1);
  }else{
   return Integer.valueOf(ff.intValue());
  }
 }

 private static String formatString(int f, String sss) {
  if(f==-1){
   return sss;
  }else if(f==0){
   if(sss.indexOf(".")>0){
    return sss.substring(0, sss.indexOf(".")+1);
   }else{
    return sss;
   }
  }else{
   if(sss.indexOf(".")+f+1>=sss.length()){
    return sss;
   }else{
    return sss.substring(0,sss.indexOf(".")+f+1);
   }
   
  }
 }

}




分享到:
评论

相关推荐

    使用js计算日期之间的差值

    使用js计算日期之间的差值不使用内置方法,无兼容问题,建议JS新手学习使用

    日期差值计算器,计算两个日期之间差多少天

    这是一个非常简单好用的东东,用于简单计算两个日期之间的差值。

    C# 计算两个日期之间相差的天数

    用C#计算两个日期之间相差的天数,通过TimeSpan进行计算比较简单

    kettle中使用js计算两个日期之间的天数.txt

    kettle中使用js计算两个日期之间的天数

    javascript 取两个日期的差值

    本文将基于提供的代码片段,详细介绍如何计算两个日期之间的差值,并在此基础上扩展更多与日期处理相关的知识。 ### 一、理解题目需求 根据给定的文件标题“javascript 取两个日期的差值”以及描述“求两个日期的...

    Delphi 计算两个日期之间的时间差(天数).rar

    3. **计算差值**:使用减法操作符 `-` 直接计算两个日期之间的差值。这将返回一个双精度浮点数,代表两个日期之间的总天数。 ```delphi var DiffDays: Double; DiffDays := Date2 - Date1; ``` 4. **处理结果*...

    简单的计算两个日期之间天数

    接下来,我们需要计算两个日期之间的差值。这可以通过减法操作实现,因为 `TDate` 是 `Double` 类型,可以直接进行数学运算: ```delphi var DiffDays: Integer; begin // 计算两个日期之间的天数差 DiffDays :=...

    求日期差值(c语言)

    有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

    计算两个日期相差的天数

    计算两个日期相差的天数是一个常见的需求,例如计算两个日期之间的时间间隔。在 Java 中,我们可以使用 Calendar 对象来实现此功能。 首先,我们可以使用 Calendar 对象的 setTime 方法将两个日期设置到 Calendar ...

    C#日期间隔计算,能计算年,月,天

    这个标题“C#日期间隔计算,能计算年,月,天”指的是如何在C#中计算两个日期之间的差值,包括年、月和天数。描述进一步提到了能够处理DateTime类型的变量,并且可以计算出两个日期之间相差的具体年、月和天数。 ...

    mysql取得两个时间之间的差值

    总之,MySQL提供了丰富的函数和操作来处理日期和时间,可以满足各种需求,无论是简单的差值计算还是复杂的日期操作。通过熟练掌握这些工具,可以有效地处理时间相关的数据问题。在实际应用中,应根据具体业务需求...

    计算日期差

    本文将详细讲解如何计算两个日期之间的差值,包括天数、小时、分钟和秒数。我们将基于Java语言,通过分析提供的`DateDays.java`和`Date`文件来探讨这一主题。 首先,Java提供了`java.util.Date`类来表示日期和时间...

    JAVA求两日期差值,判断日起合法性,前推后推日期

    在Java中,求两个日期之间的差值可以通过多种方式实现,但本代码示例中使用了自定义的`DateType`类来封装日期,并通过计算每个日期距离某一基准点(如公元元年)的总天数,然后相减得到两日期之间的差值。...

    计算两个日期之间的天数

    在IT领域,尤其是在编程和数据分析中,经常需要处理日期和时间相关的计算,比如计算两个日期之间的天数。这个任务在日常生活中也有实际应用,比如在本例中,是为了计算宝宝出生至今的天数。让我们深入探讨一下如何...

    delphi日期计算

    这是个计算两个日期时间之间差值的单元 1&gt;你在使用时只要把diffdatetime.duc文件复制到你的工程目录中,并在要使用的单元中如下引用。 implementation uses diffdatetime;//引用即可。 {$R *.dfm} 2&gt;函数说明 ...

    SQL Server各种日期计算

    DATEDIFF函数可以计算两个日期之间的小时、天、周、月、年等时间间隔的总数。它主要的用途是确定两个日期之间的时间距离,例如,计算一个人的年龄、两个事件之间相隔的天数或者两个交易之间的月数等。 DATEADD函数...

    java中计算两个日期相差几天

    给出的示例代码提供了一个名为`Test`的类,该类包含一个名为`dateDiff`的方法,用于计算两个日期之间的差值。此外,还有一个`main`方法用于调用`dateDiff`方法并传递参数。 ### 代码详解 1. **创建...

    日期时间间隔计算

    2. **时间间隔计算**:计算两个日期或时间之间的间隔通常涉及到时间戳的概念,即从某个固定参考点(如1970年1月1日)到现在的总秒数。通过减法运算,我们可以得到两个时间戳之间的差值,然后转换为天、小时、分钟等...

    Labview 日期时间标识间隔计算天数或小时数,指定加长日期计算

    - 使用“减法”运算符(-)可以计算两个日期时间戳之间的差值,得到的结果是一个双精度数值,表示的是两个时间点之间的时间间隔(以秒为单位)。 - 要将这个时间间隔转换为天数,可以除以86400(一天的总秒数)。...

    labview计算时间输入控件与当前时间的差值,并以HH:MM:SS形式的字符串显示

    3. **计算时间差**:将时间输入控件的值与当前时间相减,就可以得到两者之间的差值。这个差值也是一个浮点数,代表了两时间点之间相隔的秒数。 4. **格式化时间差**:为了以HH:MM:SS的形式显示时间差,我们需要进行...

Global site tag (gtag.js) - Google Analytics