比较数字范围内的字符串 - Java

时间:2015-08-13 14:25:02

标签: java string

我需要这个字符串格式的帮助:“08/13/2015 10:03:50”

我想比较2分钟范围内的时间。我得到一个正则表达式,但是当时间是字符串格式并且交叉到另一个小时时不知道如何去做(例如10:59:30将翻到11:01:30而不是10: 61:30)。

代码就像

string1 = "08/13/2015 10:03:50";
string2 = "08/13/2015 10:05:50, 08/13/2015 10:55:50, 08/13/2015 10:15:50, 
            08/13/2015 10:14:50, 08/13/2015 10:25:50, 08/13/2015 10:55:50";

if(string2.contains("string1(with plus or minus 2 of string1 min)"){
   //Pass
}

我用来获取日期的代码

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Calendar cal = Calendar.getInstance();
String timeOfUpdate = dateFormat.format(cal.getTime());
System.out.println(timeOfUpdate);

3 个答案:

答案 0 :(得分:4)

Strings解析为注释中建议的Date,然后通过getTime() method检索两个Date对象的时间戳。将这两个数字相互减去。这可以在毫秒中获得这些时间的时间距离,您可以将其与转换为毫秒的条件进行比较。

关于日期列表附录的

更新:要评估包含日期列表的字符串,您必须使用String#split()将字符串沿着列表分隔符拆分为字符串数组。

然后,您可以将每个子字符串解析为Date对象,并根据第一段中提到的#getTime()方法检索每个子字符串的时间戳。将这些时间戳收集到列表中。

可以在此列表中搜索预期范围内的条目,例如使用Stream API's filter function(Java 8和更高版本)。这是关于该功能的简短tutorial

答案 1 :(得分:2)

尝试执行以下步骤:

  1. 将String1转换为Date Object并应用getTime()方法,将结果存储在某个变量
  2. 使用逗号分割
  3. 将String2转换为字符串数组
  4. 对步骤#2中检索到的结果运行循环

    • 转换提取到Date Object的每个值
    • 在转换日期对象上调用getTime
    • 使用步骤#1
    • 中提取的数字减去此数字
    • 现在你将得到毫秒(1分钟= 60000毫秒)的差异
    • 如果差异大于-120000或小于120000毫秒,则打破循环并将标志设置为true。

    如果您仍然遇到任何问题,请与我们联系。

答案 2 :(得分:1)

您可以使用date.getTime()获取自1970年以来的毫秒日期并拆分日期字符串数组:

int offsetMinutes = 2;

String string1 = "08/13/2015 10:03:50, 08/14/2015 10:05:50, 08/14/2015 10:05:50";
String string2 = "08/13/2015 10:05:49, 08/14/2015 10:05:50, 08/15/2015 10:05:50";

String[] string1Array = string1.split(",");
String[] string2Array = string2.split(",");

DateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss", Locale.ENGLISH);

for (int j = 0 ; j< string1Array.length;j++)
{
    Date date1 = format.parse(string1Array[j].trim());

    for (int i = 0; i < string2Array.length; i++) {
        Date date2 = format.parse(string2Array[i].trim());
        if (date1.getTime() >= (date2.getTime() + offsetMinutes * 60 * 1000) || date1.getTime() <= (date2.getTime() - offsetMinutes * 60 * 1000)) {
            //Here we are
        }
    }
}