如何在 android 日期选择器中将特定选定日期设置为最小日期? (爪哇)

Posted

技术标签:

【中文标题】如何在 android 日期选择器中将特定选定日期设置为最小日期? (爪哇)【英文标题】:How can I set the specific selected date to min date in android date picker? (java) 【发布时间】:2021-07-08 14:26:09 【问题描述】:

我有 2 个日期选择器,一个是开始日期选择器,另一个是结束日期选择器。我想将结束 DatePicker 的最小日期设置为用户选择的开始日期。

我设置了用户在 Calander startDate 中选择的数据,并在结束日期将此数据设置为 MinDate。 我已经尝试过这种方式,但它不起作用:(

我不能使用材料范围日期选择器,因为我必须使用特定的主题。 另外我不擅长编程,如果您能详细解释一下,我将不胜感激。

ipDcEventStartDay.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v)
        final Calendar c = Calendar.getInstance();

        startYear = c.get(Calendar.YEAR);
        startMonth = c.get(Calendar.MONTH);
        startDay = c.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dpd = new DatePickerDialog(DoubleCheckEventActivity.this, new DatePickerDialog.OnDateSetListener() 
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) 
                startYear = year;
                startMonth = month+1;
                startDay = dayOfMonth;

                ipDcEventStartDay.setText(startYear + " - " + startMonth + " - " + startDay);
                ipDcEventStartDay.setTextColor(Color.parseColor("#000000"));
            
        , startYear, startMonth, startDay);
        dpd.show();
    
);

Calendar startDate = Calendar.getInstance();
startDate.set(Calendar.YEAR, startYear);
startDate.set(Calendar.MONTH, startMonth);
startDate.set(Calendar.DAY_OF_MONTH, startDay);

ipDcEventEndDay.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        final Calendar c = Calendar.getInstance();

        endYear = c.get(Calendar.YEAR);
        endMonth = c.get(Calendar.MONTH);
        endDay = c.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dpd = new DatePickerDialog(DoubleCheckEventActivity.this, new DatePickerDialog.OnDateSetListener() 
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) 
                endYear = year;
                endMonth = month;
                endDay = dayOfMonth;

                ipDcEventEndDay.setText(endYear + " - " + (endMonth+1) + " - " + endDay);
                ipDcEventEndDay.setTextColor(Color.parseColor("#000000"));
            
        , endYear,endMonth, endDay);
        dpd.getDatePicker().setMinDate(startDate.getTimeInMillis());
        dpd.show();
    
);

【问题讨论】:

你能发布你的最小和最大日期的实现吗?也许那里有一些问题,因为这些是使用的方法。我想你已经检查了this post @javdromero 这些代码就是我所做的一切。我将结束日期日期选择器设置为dpd.getDatePicker().setMinDate(startDate.getTimeInMillis()); dpd.show(); 不要再次发帖the same question。而是编辑您之前的问题以改进它。 【参考方案1】:

这段代码:

startDate.set(Calendar.YEAR, startYear);
startDate.set(Calendar.MONTH, startMonth);
startDate.set(Calendar.DAY_OF_MONTH, startDay);

应该在里面

ipDcEventEndDay.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 

因为startYearstartMonthstartDay只设置在ipDcEventStartDay.setOnClickListener()上,所以一开始它们有一些价值,但不是ipDcEventStartDay.setOnClickListener()上设置的值

所以在ipDcEventEndDay.setOnClickListener() 中,您必须在startDate 上再次设置在另一个DatePickerDialog 上选取的值

【讨论】:

非常感谢!我明白:) 我可以再问你一个问题吗?我想将 startDate 和 endDate 日历值转换为字符串。我在 ipDcEventDay.setOnClickLister ... 之后添加了这段代码,但 startDate 和 endDate 都记录了 00021231 这是我尝试过的代码Calendar startDate = Calendar.getInstance(); startDate.set(startYear, startMonth, startDay); Date start = startDate.getTime(); Calendar endDate = Calendar.getInstance(); endDate.clear(); endDate.set(endYear,endMonth,endDay); Date end = endDate.getTime(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); String startDay = simpleDateFormat.format(start); String endDay = simpleDateFormat.format(end); Log.d("start",startDay); Log.d("end",endDay); 请将该代码作为编辑放在问题上,在评论中无法理解,您也可以使用startDate.getTime().toString()进行简单转换

以上是关于如何在 android 日期选择器中将特定选定日期设置为最小日期? (爪哇)的主要内容,如果未能解决你的问题,请参考以下文章

在引导日期选择器中将课程添加到多个/特定日期?

如何在android的日期选择器中设置特定日期

如何在前一个 tableview 控制器的 detailtext 标签中显示选定的选择器日期

在android中将日期设置为日期选择器

如何在 jquery ui 日期选择器中同时禁用周末和选定日期?

在 Android 日期选择器中禁用特定日期