c# - 从某个日期 Android DatePicker 的几个月后禁用所有日期

标签 c# android datetime datepicker xamarin

我的应用程序中有两个 DatePickers。首先,显示 FromDate,即 CurrentDate+1,第二个显示 ToDate,即。 从日期+1

我已经实现了上述场景。但现在我想禁用 FromDate 6 个月后的所有日期。 我尝试执行以下操作,但日历随后显示 01/01/1970 作为当前日期。

预订 Activity .cs

void IbtnToDate_Click(object sender, EventArgs e)
        {
            toDateClicked = true;
            fromDateClicked = false;
            dateFragment = new DatePickerFragment(this,  DateTime.Parse (editFromDate.Text.ToString ()).AddDays (1), this, DateTime.Parse (editFromDate.Text.ToString ()));
            dateFragment.Show(FragmentManager, null);
        }

        void IbtnFromDate_Click(object sender, EventArgs e)
        {
            fromDateClicked = true;
            toDateClicked = false;
            dateFragment = new DatePickerFragment(this, date.AddDays (1), this, date.AddDays (1));
            dateFragment.Show(FragmentManager, null);

        }


        public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            var date1 = new DateTime(year, monthOfYear + 1, dayOfMonth);

            if (fromDateClicked)
                UpdateFromDate (date1);
            else if (toDateClicked) {

                UpdateToDate (date1);
            }
        }

DatePickerFragment.cs

 public class DatePickerFragment : DialogFragment
    {
        private readonly Context _context;
        private DateTime _date, _minDate, _maxDate;
        private readonly Android.App.DatePickerDialog.IOnDateSetListener _listener;

        public DatePickerFragment(Context context, DateTime date, Android.App.DatePickerDialog.IOnDateSetListener listener, DateTime minDate)
        {
            _context = context;
            _date = date;
            _listener = listener;
            _minDate = minDate;

        }

        public override Dialog OnCreateDialog(Bundle savedState)
        {

            var dialog = new Android.App.DatePickerDialog(_context, _listener, _date.Year, _date.Month - 1, _date.Day);
            dialog.DatePicker.MinDate =_minDate.AddDays (1).Millisecond;
            dialog.DatePicker.MaxDate = _date.AddMonths(6).Millisecond;
            return dialog;
        }
    }

我怎样才能实现它?任何帮助将不胜感激。

最佳答案

您可以使用 setMaxDate 并可以执行以下操作:

1- 从 _mindate 字符串中获取日期:

  String dateString = "03/26/2012";
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    Date convertedDate = new Date();
    try {
        convertedDate = dateFormat.parse(dateString);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

2- 从 min_date 获取 6 个月的日期:

Calendar cal = GregorianCalendar.getInstance();
cal.setTime(convertedDate);
cal.add(Calendar.MONTH, 1);
Date 6MonthsFromCurrentDate = cal.getTime();

3- 将 datePicker 限制为该日期:

datePickerDialog.getDatePicker().setMaxDate(6MonthsFromCurrentDate.getTime());

关于c# - 从某个日期 Android DatePicker 的几个月后禁用所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30342252/

相关文章:

c# - 将 winapi 事件转发到另一个窗口

android - 从 URL 在 VideoView Android 中查找时出错

sql-server - 1/1/1753 在 SQL Server 中有何意义?

c# - Unity registerType 泛型参数的多态解析

c# - 在 .NET 中进行文本到语音转换的一些好的资源是什么?

android - 使用 AlarmManager 设置重复通知 - Android

android - 首次调用 WebViewClient 时页面加载缓慢

django - 基于类的 View MySQL DateTimeField 收到了一个简单的日期时间

Python,日期时间 "time gap"百分比

c# - .NET Framework 4.6.1 上的 Microsoft.AspNetCore.All