如何将当前日期与android中的所选日期与java进行比较

时间:2015-08-01 07:24:10

标签: android

我使用下面的代码

获取当前日期
long millis=System.currentTimeMillis();
java.sql.Date date=new java.sql.Date(millis);

我正在使用

选择日期
CalendarView cal.setOnDateChangeListener(new OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth)

String s = +year + " : " + (month + 1) + " : " +dayOfMonth ;

将其传递给下一个活动 -

Intent in = new Intent(MainActivity.this, sec.class);
in.putExtra("TextBox", s.toString());
startActivity(in);

如果用户从当前日期选择了上一个日期,我想在这里查看 然后发一条消息,不要继续下一个活动。

4 个答案:

答案 0 :(得分:19)

使用SimpleDateFormat:

如果您的日期是 31/12/2014 格式。

String my_date = "31/12/2014"

然后您需要将其转换为 SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(my_date);
if (new Date().after(strDate)) {
    your_date_is_outdated = true;
}
else{
    your_date_is_outdated = false;
}

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(my_date);
if (System.currentTimeMillis() > strDate.getTime()) {
    your_date_is_outdated = true;
}
else{
    your_date_is_outdated = false;
}

答案 1 :(得分:1)

我正在提供现代的答案。

java.time和ThreeTenABP

使用现代Java日期和时间API java.time中的LocalDate

要使用当前日期

    LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());
    System.out.println(currentDate);

我刚才运行此代码时,输​​出为:

2020-01-05

要在日期选择器中获取所选日期

    int year = 2019;
    int month = Calendar.DECEMBER; // but don’t use `Calendar`
    int dayOfMonth = 30;

    LocalDate selectedDate = LocalDate.of(year, month + 1, dayOfMonth);

    System.out.println(selectedDate);

2019-12-30

您的日期选择器正在使用与设计不良且过时的Calendar类相同的疯狂月份编号。仅出于这个原因,为了产生可读的代码,我使用了该类中的常量来初始化month。在日期选择器中,您将获得给您的号码,因此您没有理由使用Calendar。所以不要。

出于同样的原因,就像在您自己的代码中一样,我在month上加1以获取正确的月份数(例如12月为12)。

是过去的日期吗?

    if (selectedDate.isBefore(currentDate)) {
        System.out.println("" + selectedDate + " is in the past; not going to next activity");
    } else {
        System.out.println("" + selectedDate + " is OK; going to next activity");
    }

2019-12-30已过时;不参加下一个活动

转换为字符串并返回

如果您需要将所选日期转换为字符串以使其通过Intent(我不知道这是否是必需条件),请使用toString和{{1 }}种parse方法:

LocalDate

2019-12-30

问题:java.time是否不需要Android API级别26?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在旧版Android上,请使用Android版的ThreeTen Backport。称为ThreeTenABP。并确保使用子包从 String dateAsString = selectedDate.toString(); LocalDate recreatedLocalDate = LocalDate.parse(dateAsString); System.out.println(recreatedLocalDate); 导入日期和时间类。

链接

答案 2 :(得分:0)

使用以下代码,

  1. 使用日期格式或
  2. 创建日期对象
  3. 比较日期(比较日期有很多方法,这里提到一个)
  4. 打开意图或按照你说的消息做吐司。

    CalendarView cal.setOnDateChangeListener(new OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        String s =  (month + 1) + "-" + dayOfMonth + "-" + year;
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
        Date dateSource = null;
        Calendar cal = Calendar.getInstance();
        Date sysDate = cal.getTime();
    
        try {
            dateSource = sdf.parse(s);
            if(dateSource.compareTo(sysDate)>0){
                Toast.makeToast("Selected worng date",Toast.SHOW_LONG).show();
            }else{
                Intent in = new Intent(MainActivity.this, sec.class);
                in.putExtra("TextBox", s.toString());
                startActivity(in);
            }
        }
        catch (ParseException e) {
            Loger.log("Parse Exception " + e);
            e.printStackTrace();
       }
       }
    }
    
  5. 修改

    1. 您需要一个视图xml,其中定义了日历。它可以是片段或活动视图xml文件
    2. 在您的Activity或片段类中夸大视图。
    3.   

      查看_rootView = inflater.inflate({your layout file},container,false);

      1. 从xml中获取相应的控件java对象,如
      2.   

        cal =(CalendarView)_rootView.findViewById(R.id.calViewId);

        1. 现在在此cal对象上调用事件侦听器。

答案 3 :(得分:0)

尝试以下代码行,这可能会有所帮助。干杯!!!

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
        Date date = sdf.parse(enteredDate);
        if (System.currentTimeMillis() > date.getTime()) {
            //Entered date is backdated from current date
        } else {
            //Entered date is updated from current date
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }