C# 如何在DatePickerDialog中使用非今天的特定日期设置最小日期(XAMARIN)

C# 如何在DatePickerDialog中使用非今天的特定日期设置最小日期(XAMARIN),c#,android,xamarin,android-datepicker,datepickerdialog,C#,Android,Xamarin,Android Datepicker,Datepickerdialog,我想要的是将日期设置为禁用特定日期之前(而不是今天之前)。e、 g: 今天是2017年5月5日 具体目标日期:仅5月1日至5月5日 使用此代码将禁用所有大于此日期的项 dialog.DatePicker.MaxDate = Java.Lang.JavaSystem.CurrentTimeMillis(); 但我不能在5月1日之前禁用 我现在有这个密码 public class DatePickerFragment : DialogFragment,

我想要的是将日期设置为禁用特定日期之前(而不是今天之前)。e、 g:

今天是2017年5月5日 具体目标日期:仅5月1日至5月5日

使用此代码将禁用所有大于此日期的项

        dialog.DatePicker.MaxDate = Java.Lang.JavaSystem.CurrentTimeMillis();
但我不能在5月1日之前禁用

我现在有这个密码

public class DatePickerFragment : DialogFragment,
                              DatePickerDialog.IOnDateSetListener
{
    // TAG can be any string of your choice.
    public static readonly string TAG = "X:" + typeof(DatePickerFragment).Name.ToUpper();

    // Initialize this value to prevent NullReferenceExceptions.
    Action<DateTime> _dateSelectedHandler = delegate { };

    public static DatePickerFragment NewInstance(Action<DateTime> onDateSelected)
    {
        DatePickerFragment frag = new DatePickerFragment();
        frag._dateSelectedHandler = onDateSelected;
        return frag;
    }

    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        DateTime currently = DateTime.Now;
        DatePickerDialog dialog = new DatePickerDialog(Activity,
                                                       this,
                                                       currently.Year,
                                                       currently.Month-1,
                                                       currently.Day);

        //****************this is my problem*****************//
        dialog.DatePicker.MinDate = CurrentUser.lastReplenish.Millisecond;
        dialog.DatePicker.MaxDate = Java.Lang.JavaSystem.CurrentTimeMillis();
        //***************************************************//
        return dialog;
    }

    public void OnDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {
        // Note: monthOfYear is a value between 0 and 11, not 1 and 12!
        DateTime selectedDate = new DateTime(year, monthOfYear + 1, dayOfMonth);
        Log.Debug(TAG, selectedDate.ToLongDateString());
        _dateSelectedHandler(selectedDate);
    }
}
公共类DatePickerFragment:DialogFragment, DatePickerDialog.IOnDateSetListener { //标记可以是您选择的任何字符串。 公共静态只读字符串TAG=“X:”+typeof(DatePickerFragment).Name.ToUpper(); //初始化此值以防止NullReferenceException。 动作_dateSelectedHandler=委托{}; 公共静态DatePickerFragment NewInstance(操作onDateSelected) { DatePickerFragment frag=新的DatePickerFragment(); frag.\u dateSelectedHandler=onDateSelected; 返回碎片; } 创建对话框上的公共覆盖对话框(Bundle savedInstanceState) { DateTime当前=DateTime.Now; DatePickerDialog对话框=新建DatePickerDialog(活动, 这 目前,今年,, 目前,第1个月, 当前(天); //****************这是我的问题*****************// dialog.DatePicker.MinDate=CurrentUser.LastInfull.毫秒; dialog.DatePicker.MaxDate=Java.Lang.JavaSystem.CurrentTimeMillis(); //***************************************************// 返回对话框; } 公共void OnDateSet(日期选择器视图,整数年,整数月,整数月) { //注意:monthOfYear是介于0和11之间的值,而不是介于1和12之间的值! DateTime selectedDate=新的日期时间(年、月+1、月天数); Log.Debug(标记,selectedDate.ToLongDateString()); _dateSelectedHandler(selectedDate); } } 我猜“CurrentUser.lastInfull”是一个.NET日期时间对象?! Android总是需要从1970年1月1日(纪元)开始的毫秒数,因此您需要计算一点:

dialog.DatePicker.MinDate = (long)CurrentUser.lastReplenish.ToUniversalTime()
    .Subtract(DateTime.MinValue.AddYears(1969)).TotalMilliseconds;

我现在刚把它编码好,它工作得很好!非常感谢!:)