Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android和java中比较当前日期和所选日期_Android - Fatal编程技术网

如何在android和java中比较当前日期和所选日期

如何在android和java中比较当前日期和所选日期,android,Android,我使用下面的代码获取当前日期 long millis=System.currentTimeMillis(); java.sql.Date date=new java.sql.Date(millis); 我正在使用 CalendarView cal.setOnDateChangeListener(new OnDateChangeListener() { @Override public void onSelectedDayChange(Calend

我使用下面的代码获取当前日期

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 ;
并在下一个活动中作为--

我想在这里检查用户是否从当前日期选择了上一个日期
然后给出一条消息,不要继续下一个活动。

使用SimpleDateFormat:

如果您的日期为2014年12月31日

String my_date = "31/12/2014"
然后需要将其转换为SimpleDataFormat

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;
}

使用下面的代码

  • 使用日期格式化程序创建日期对象
  • 比较日期(有很多方法可以比较日期,这里提到了一种)
  • 如你所说,打开意图或敬酒

    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();
       }
       }
    }
    
  • 编辑

    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;
    }
    
  • 您需要一个视图xml,其中定义了日历。它可以是片段或活动视图xml文件
  • 膨胀活动或片段类中的视图
  • View _rootView=inflater.inflate({your layout file},container,false)

  • 从xml中获取相应的控件java对象,如
  • cal=(CalendarView)\u rootView.findViewById(R.id.calViewId)

  • 现在在此cal对象上调用事件侦听器

  • 试试这几行代码,这可能会有所帮助。干杯

    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();
        }
    

    我提供的是现代的答案

    java.time和ThreeTenABP 使用java.time中的
    LocalDate
    ,这是现代java日期和时间API

    以获取当前日期

        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

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

    出于同样的原因,正如在您自己的代码中一样,我将1添加到
    month
    ,以获得正确的月数(例如,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
    (我不知道这是否是一项要求),请使用
    LocalDate
    toString
    parse
    方法:

        String dateAsString = selectedDate.toString();
        LocalDate recreatedLocalDate = LocalDate.parse(dateAsString);
        System.out.println(recreatedLocalDate);
    
    2019-12-30

    问:java.time不需要Android API级别26吗? time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

    • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
    • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
    • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
      org.threeten.bp
      导入日期和时间类
    链接
    • 解释如何使用java.time
    • ,其中首先描述了
      java.time
    • ,java.time的后端口
    到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

  • 什么是异常,则上述代码将工作或引发异常。若不是两者都有,那个么问题在于你们的日历控件或者其他一些东西。我在答案中添加了更多的细节。这就是我现在能帮上忙的,你的答案基本上是这样的,但是如果用try-catch-blockClose,我发现这是一种更方便的方法。我只是分享了我的代码块。
        String dateAsString = selectedDate.toString();
        LocalDate recreatedLocalDate = LocalDate.parse(dateAsString);
        System.out.println(recreatedLocalDate);