Java 比较具有可接受差异的日期和时间

Java 比较具有可接受差异的日期和时间,java,selenium,Java,Selenium,假设我有两个包含日期的字符串,如下所示 String A = 25 Nov 2015 10.50 GMT+6 String B = 25 Nov 2015 10.45 GMT+6 如何使两个日期字符串之间的差异为几分钟是可以接受的?我不能使用Selenium在两个字符串之间进行断言,因为它肯定会引发断言错误。解析字符串,然后比较毫秒数并应用阈值 但首先,您必须修复那些糟糕的GMT偏移 String a = "25 Nov 2015 10.50 GMT+6"; String b = "25 No

假设我有两个包含日期的字符串,如下所示

String A = 25 Nov 2015 10.50 GMT+6
String B = 25 Nov 2015 10.45 GMT+6

如何使两个日期字符串之间的差异为几分钟是可以接受的?我不能使用Selenium在两个字符串之间进行断言,因为它肯定会引发断言错误。

解析字符串,然后比较毫秒数并应用阈值

但首先,您必须修复那些糟糕的GMT偏移

String a = "25 Nov 2015 10.50 GMT+6";
String b = "25 Nov 2015 10.45 GMT+6";

// fix bad GMT
a = a.replaceFirst(" GMT\\+(\\d)\\b", " GMT+0$1");
b = b.replaceFirst(" GMT\\+(\\d)\\b", " GMT+0$1");

// parse dates
SimpleDateFormat datefmt = new SimpleDateFormat("d MMM yyyy HH.mm 'GMT'X");
Date dateA = datefmt.parse(a);
Date dateB = datefmt.parse(b);

// detect difference
long diffInMillis = Math.abs(dateA.getTime() - dateB.getTime());
if (diffInMillis < 5 * 60 * 1000) {
    // all is good
} else {
    // bad: 5 or more minutes apart
}
String a=“2015年11月25日10.50 GMT+6”;
字符串b=“2015年11月25日10.45 GMT+6”;
//修复坏的GMT
a=a.replaceFirst(“GMT\\+(\\d)\\b”,“GMT+0$1”);
b=b.replaceFirst(“GMT\\+(\\d)\\b”,“GMT+0$1”);
//解析日期
SimpleDateFormat datefmt=新的SimpleDateFormat(“d MMM yyyy HH.mm'GMT'X”);
Date dateA=datefmt.parse(a);
Date dateB=datefmt.parse(b);
//检测差异
long diffInMillis=Math.abs(dateA.getTime()-dateB.getTime());
如果(差值毫秒<5*60*1000){
//一切都很好
}否则{
//坏:相隔5分钟或更长时间
}

您可以使用下面的比较器来比较大致相同的日期。在实例化比较器时,可以确定两个日期的增量相等

public class RoughlyEqualDates implements Comparator<String> {

    int acceptableDelta = 300000; // 5 minutes
    SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy HH:mm");//choose appropriate format here
    RoughlyEqualDates(int deltaInMins){//configurable delta
        this.acceptableDelta = deltaInMins*60*1000;
    }
    public int compare(String date1, String date2) {
        long d1,d2;
        try {
            d1 = format.parse(date1).getTime();
            d2 = format.parse(date2).getTime();
        } catch (ParseException e) {
            throw new IllegalArgumentException(e);
        }

        if(Math.abs(d1-d2)<=acceptableDelta){
            return 0;
        }else{
            return d1>d2?1:-1;
        }
    }
}
公共类粗略地等价于实现比较器{
int acceptableDelta=300000;//5分钟
SimpleDataFormat=new SimpleDataFormat(“dd-MMM-yyy-HH:mm”);//在此处选择适当的格式
大致相等于三角洲(内三角洲){//
this.acceptableDelta=deltaInMins*60*1000;
}
公共整数比较(字符串日期1,字符串日期2){
长d1,d2;
试一试{
d1=format.parse(date1.getTime();
d2=format.parse(date2.getTime();
}捕获(解析异常){
抛出新的IllegalArgumentException(e);
}
如果(数学abs(d1-d2)d2-1:-1;
}
}
}

建议的方法很好,不过我相信您一定是从
日期
本身获取了这些字符串,在这种情况下,为什么不尝试以下方法:

Date d1 = <source for String A>;
Date d2 = <source for String B>;
long diff = d2.getTime() - d1.getTime();

//here are the differences
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);

//for your case 
if(diffMinutes <= acceptableDifference) //I' fine with it
else //Give me something else
dated1=;
日期d2=;
long diff=d2.getTime()-d1.getTime();
//这里是不同之处
长diffSeconds=diff/1000%60;
长diffMinutes=diff/(60*1000)%60;
长diffHours=diff/(60*60*1000)%24;
长diffDays=diff/(24*60*60*1000);
//为了你的案子

if(diffMinutes)这些是无效的GMT偏移值。
GMT
后面的数字必须是2位(
+06
),4位(
+0600
),或带冒号(
+06:00
)。