日期之间的差值计算

两个日期做减法,返回类型是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);
}

}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值