两个日期做减法,返回类型是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新手学习使用
这是一个非常简单好用的东东,用于简单计算两个日期之间的差值。
3. **计算差值**:使用减法操作符 `-` 直接计算两个日期之间的差值。这将返回一个双精度浮点数,代表两个日期之间的总天数。 ```delphi var DiffDays: Double; DiffDays := Date2 - Date1; ``` 4. **处理结果*...
kettle中使用js计算两个日期之间的天数
用C#计算两个日期之间相差的天数,通过TimeSpan进行计算比较简单
本文将基于提供的代码片段,详细介绍如何计算两个日期之间的差值,并在此基础上扩展更多与日期处理相关的知识。 ### 一、理解题目需求 根据给定的文件标题“javascript 取两个日期的差值”以及描述“求两个日期的...
接下来,我们需要计算两个日期之间的差值。这可以通过减法操作实现,因为 `TDate` 是 `Double` 类型,可以直接进行数学运算: ```delphi var DiffDays: Integer; begin // 计算两个日期之间的天数差 DiffDays :=...
计算两个日期相差的天数是一个常见的需求,例如计算两个日期之间的时间间隔。在 Java 中,我们可以使用 Calendar 对象来实现此功能。 首先,我们可以使用 Calendar 对象的 setTime 方法将两个日期设置到 Calendar ...
这个标题“C#日期间隔计算,能计算年,月,天”指的是如何在C#中计算两个日期之间的差值,包括年、月和天数。描述进一步提到了能够处理DateTime类型的变量,并且可以计算出两个日期之间相差的具体年、月和天数。 ...
总之,MySQL提供了丰富的函数和操作来处理日期和时间,可以满足各种需求,无论是简单的差值计算还是复杂的日期操作。通过熟练掌握这些工具,可以有效地处理时间相关的数据问题。在实际应用中,应根据具体业务需求...
本文将详细讲解如何计算两个日期之间的差值,包括天数、小时、分钟和秒数。我们将基于Java语言,通过分析提供的`DateDays.java`和`Date`文件来探讨这一主题。 首先,Java提供了`java.util.Date`类来表示日期和时间...
- 使用“减法”运算符(-)可以计算两个日期时间戳之间的差值,得到的结果是一个双精度数值,表示的是两个时间点之间的时间间隔(以秒为单位)。 - 要将这个时间间隔转换为天数,可以除以86400(一天的总秒数)。...
在Java中,求两个日期之间的差值可以通过多种方式实现,但本代码示例中使用了自定义的`DateType`类来封装日期,并通过计算每个日期距离某一基准点(如公元元年)的总天数,然后相减得到两日期之间的差值。...
在IT领域,尤其是在编程和数据分析中,经常需要处理日期和时间相关的计算,比如计算两个日期之间的天数。这个任务在日常生活中也有实际应用,比如在本例中,是为了计算宝宝出生至今的天数。让我们深入探讨一下如何...
这是个计算两个日期时间之间差值的单元 1>你在使用时只要把diffdatetime.duc文件复制到你的工程目录中,并在要使用的单元中如下引用。 implementation uses diffdatetime;//引用即可。 {$R *.dfm} 2>函数说明 ...
DATEDIFF函数可以计算两个日期之间的小时、天、周、月、年等时间间隔的总数。它主要的用途是确定两个日期之间的时间距离,例如,计算一个人的年龄、两个事件之间相隔的天数或者两个交易之间的月数等。 DATEADD函数...
给出的示例代码提供了一个名为`Test`的类,该类包含一个名为`dateDiff`的方法,用于计算两个日期之间的差值。此外,还有一个`main`方法用于调用`dateDiff`方法并传递参数。 ### 代码详解 1. **创建...
2. **时间间隔计算**:计算两个日期或时间之间的间隔通常涉及到时间戳的概念,即从某个固定参考点(如1970年1月1日)到现在的总秒数。通过减法运算,我们可以得到两个时间戳之间的差值,然后转换为天、小时、分钟等...
SQL Server 中的日期计算是非常重要的,许多业务需求都需要计算日期之间的差值。本文将详细介绍如何使用 DATEADD 和 DATEDIFF 函数来计算日期,包括计算本月的第一天、本月的最后一天、本年度的最后一天等。 首先,...
在本本科作业中,你将学习如何使用`CTime`类来计算两个日期时间之间的差值,并以多种方式显示这个时间差。 首先,让我们了解一下`CTime`类的基本用法。`CTime`对象可以表示一个特定的日期和时间,包括年、月、日、...