AddMinutes工作但不是AddHours?

时间:2018-05-04 12:57:08

标签: c# android datetime xamarin datepicker

我有一个DatePicker和一个TimePicker来获取evenement的时间和日期 我设法从拾取器中获取值并希望将它们全部存储在DateTime中 为了将时间添加到DateTime我使用AddMinutes()和AddHours,AddMinutes工作得很好但不是AddHours,即使它们的使用方式完全相同。
我做错了什么? 这是我宣布我的采摘者(吸气剂工作正常)的地方

DatePicker dps = FindViewById<DatePicker>(Resource.Id.Start_dp);
DatePicker dpe = FindViewById<DatePicker>(Resource.Id.End_dp);
TimePicker tps = FindViewById<TimePicker>(Resource.Id.Start_tp);
TimePicker tpe = FindViewById<TimePicker>(Resource.Id.End_tp);

dps.UpdateDate(_event.Start_date.Year, _event.Start_date.Month, _event.Start_date.Day);
dpe.UpdateDate(_event.End_date.Year, _event.End_date.Month, _event.End_date.Day);
tps.Hour = _event.Start_date.Hour;
tps.Minute = _event.Start_date.Minute;
tpe.Hour = _event.End_date.Hour;
tpe.Minute = _event.End_date.Minute;`

更新事件,其中AddHours不更新DateTime(我验证tpe.Hour的实际值不是0)

        Button update_event = FindViewById<Button>(Resource.Id.update_event);

        update_event.Click += delegate
        {
            DateTime dts;
            dts = dps.DateTime.AddHours(tps.Hour);
            dts = dps.DateTime.AddMinutes(tps.Minute);
            DateTime dte;
            dte = dpe.DateTime.AddHours(tpe.Hour);
            dte = dpe.DateTime.AddMinutes(tpe.Minute);


            _event.Name = lieuTitle.Text;
            _event.Start_date = dts;
            _event.End_date = dte;

            Linker.Put<Event>(_event, _event.Id);
        };

2 个答案:

答案 0 :(得分:4)

您应该继续修改dtsdte

        DateTime dts;
        dts = dps.DateTime.AddHours(tps.Hour);
        dts = dts.AddMinutes(tps.Minute); // dts

        DateTime dte;
        dte = dpe.DateTime.AddHours(tpe.Hour);
        dte = dte.AddMinutes(tpe.Minute); // dte

或者在 one go 中创建所需的值更具可读性

         DateTime dts = dps.DateTime
           .AddHours(tps.Hour)
           .AddMinutes(tps.Minute);

         DateTime dte = dpe.DateTime
           .AddHours(tpe.Hour);
           .AddMinutes(tpe.Minute); 

答案 1 :(得分:1)

好吧,DateTime是不可变的。当您使用AddHoursAddMinutes等时,它会返回一个新的DateTime对象。

所以我们假设我们有这样的代码:

DateTime a, b;
a = DateTime.Now;
b = a.AddHours(1);
b = a.AddMinutes(1);

会发生什么事?

  1. 它会将DateTime创建的a.AddHours(1)对象分配给ba将保持不变。
  2. 接下来,它会将DateTime创建的a.AddMinutes(1)对象分配给ba将保持不变。
  3. 你需要做些什么来解决这个问题?致电DateTime时,您需要使用AddHours(1)生成的新AddMinutes(1)

    DateTime a, b;
    a = DateTime.Now;
    b = a.AddHours(1);
    b = b.AddMinutes(1);
    

    或者你可以把它链起来:

    DateTime a, b;
    a = DateTime.Now;
    b = a.AddHours(1).AddMinutes(1);
    
相关问题