使用Java Calendar(Android)确定给定的字符串时间是否过去

时间:2018-02-22 22:24:43

标签: java android date

我正在尝试编写' isPast(String dateStr)' function,接收日期字符串,如果是,则返回true,否则返回false。

private static boolean isPast(String dateStr) {
    Calendar c = GregorianCalendar.getInstance();

    int currentYear = c.get(Calendar.YEAR);
    int currentMonth = c.get(Calendar.MONTH);
    int currentDay = c.get(Calendar.DAY_OF_MONTH);
    int currentHour = c.get(Calendar.HOUR_OF_DAY);
    int currentMinute = c.get(Calendar.MINUTE);
    c.set(currentYear, currentMonth, currentDay, currentHour, currentMinute);
    Date now = c.getTime();

    SimpleDateFormat sdfDates = new SimpleDateFormat("dd/m/yyyy");

    Date date = null;
    try {
        date = sdfDates.parse(dateStr);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    if (now.compareTo(date) == 1){
        System.out.println(dateStr + " date given is past");
        return true;
    }
    System.out.println(dateStr + " date given is future");
    return false;
}

我打电话给:

 String str1 = "22/04/2018";
 String str2 = "22/01/2018";
 System.out.println(isPast(str1));
 System.out.println(isPast(str2));

输出是:

22/04/2018 date given is past
22/01/2018 date given is past

这里发生了什么?事实并非如此。我对此已经太久了 - 它应该很简单,显然我错过了那个Calendar对象......

2 个答案:

答案 0 :(得分:4)

使用Java 8中提供的LocalDate

  public static void main(String[] args) {

    String str1 = "22/04/2018";
    String str2 = "22/01/2018";
    System.out.println(isPast(str1));
    System.out.println(isPast(str2));
  }


  private static boolean isPast(String dateStr) {

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    LocalDate dates = LocalDate.parse(dateStr, formatter);

    return dates.isBefore(LocalDate.now());
  }

答案 1 :(得分:0)

试试这个:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    public static void main(String[] args) {

         String str1 = "22/04/2018";
         String str2 = "22/01/2018";
         String str3 = "xx/01/2018";

         Date now = new Date();

         testDate (str1, now);
         testDate (str2, now);
         testDate (str3, now);
    }

    private static void testDate(String str, Date now) {
         try {
            if (sdf.parse(str).before(now)) {
                 System.out.println(str + " is in the past.");
             } else {
                 System.out.println(str + " is in the future.");
             }
        } catch (ParseException e) {
             System.out.println("Date not in format dd/MM/yyyy : " + str);
        } 
    }
}

输出:

22/04/2018 is in the future.
22/01/2018 is in the past.
Date not in format dd/MM/yyyy : xx/01/2018

如果您必须使用日历,请尝试以下方法:

    private static void testDateUsingCalendar (String str, Date now) {
         try {
            String[] split = str.split("/");
            Calendar c = GregorianCalendar.getInstance();

            c.set(Integer.valueOf(split[2]), Integer.valueOf(split[1]), Integer.valueOf(split[0]));
            if (c.getTime().before(now)) {
                 System.out.println(str + " is in the past.");
             } else {
                 System.out.println(str + " is in the future.");
             }
        } catch (Exception e) {
             System.out.println("Date not in format dd/MM/yyyy : " + str);
        } 
    }