为什么比较两个日期在java.util.date中无法正常工作?

时间:2017-09-20 07:33:27

标签: java spring date

我有三个约会:

  1. 交货时间(字符串)
  2. 的StartDate(长)
  3. 结束日期(长)
  4. 如果在startdate和enddate之间进行交付日期,则将完成添加。但是日期无法正确比较,日期格式也无法正常工作。

    这是我的代码:

    private long addTotalLiveBirthChild(Members member) {
    
            String deliveryDateStr = member.details().get("DOO");
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
            Date dooDate = null;
            Date startDate = new Date(startDateTime);
            Date endDate = new Date(endDateTime);
            try {
                dooDate = simpleDateFormat.parse(deliveryDateStr);
                new SimpleDateFormat("dd/MM/yyyy").format(startDate);
                new SimpleDateFormat("dd/MM/yyyy").format(endDate);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            System.err.println("DeliveryDate:" + dooDate + " startDate:" + startDate + " endDate:" + endDate);
            if(dooDate.after(startDate)   && dooDate.before(endDate) ){
    
                totalCountOfLiveBirth = totalCountOfLiveBirth + Long.parseLong(member.details().get("Num_Live_Birth"));
            }
            return totalCountOfLiveBirth;
        }
    

    以下是打印结果:

    Here is the print result:

2 个答案:

答案 0 :(得分:0)

private long addTotalLiveBirthChild(Members member) {

        String deliveryDateStr = member.details().get("DOO");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Date dooDate = null;
        Date startDate = new Date(startDateTime);
        Date endDate = new Date(endDateTime);
        try {
            dooDate = simpleDateFormat.parse(deliveryDateStr);
            new SimpleDateFormat("dd/MM/yyyy").format(startDate); // return String representation, which you don't use anywhere
            new SimpleDateFormat("dd/MM/yyyy").format(endDate); // return String representation, which you don't use anywhere
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.err.println("DeliveryDate:" + dooDate + " startDate:" + startDate + " endDate:" + endDate);
        if(dooDate.after(startDate)   && dooDate.before(endDate) ){

            totalCountOfLiveBirth = totalCountOfLiveBirth + Long.parseLong(member.details().get("Num_Live_Birth"));
        }
        return totalCountOfLiveBirth;
    }

请参阅上面的评论(返回字符串表示,您不在任何地方使用)。你不需要这一行。

据我了解,您只想比较日期,没有时间。然后你应该使用这个功能:

public static Date zeroTimeDate(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.MILLISECOND, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.HOUR, 0);

    return calendar.getTime();
}

Date startDate = zeroTimeDate(new Date(startDateTime));
Date endDate = zeroTimeDate(new Date(endDateTime));

注意: 如果你可以使用Java 8 Date API,它可能会更简单。

答案 1 :(得分:0)

我会说得很简单。

步骤:

  1. 不要比较字符串,比较数字是合乎逻辑的!
  2. 将投放时间转换为长
  3. 简单if()确定天气是否在日期
  4. 不要以为你必须理解代码,ofc。我们是人类,可以“看到”它们是否在我们比较的日期之间或之外。但是机器需要数字来表现最佳。
  5. 像这样:

      long deliverytime,starttime,endtime;
    //.. declare values and convert them from string to long
      if(deliverytime > starttime && deliverytime < endtime){
          //do your stuff
      } else {
          //it´s not between
      }
    

    我在sql中更多地遇到这个问题,人们可以理解的安全数据,但是他们想知道为什么数据库与真/假不同而不是0/1。

    <强> 重要 Dateformat用于显示用户的日期,程序员不应在代码中使用它,除非是textview.settext(formatdate);