代码之家  ›  专栏  ›  技术社区  ›  user3794667384

增加分钟工作,但不增加小时?

  •  0
  • user3794667384  · 技术社区  · 6 年前

    我有一个日期选择器和一个时间选择器来获取晚上的时间和日期。
    我设法从选择器中获取值,并希望将它们全部存储在DateTime中。
    要将时间添加到DateTime,我使用AddMinutes()和AddHours,AddMinutes可以很好地工作,但AddHours不能工作,即使它们的使用方式完全相同。
    我做错了什么?
    这里是我声明选取器的地方(getter工作正常)

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

    以及update事件,其中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 回复  |  直到 6 年前
        1
  •  4
  •   Dmitrii Bychenko    6 年前

    你应该继续修改 dts dte :

            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
    

    或在中创建所需的值 一次性 看起来 更具可读性 :

             DateTime dts = dps.DateTime
               .AddHours(tps.Hour)
               .AddMinutes(tps.Minute);
    
             DateTime dte = dpe.DateTime
               .AddHours(tpe.Hour);
               .AddMinutes(tpe.Minute); 
    
        2
  •  1
  •   ProgrammingLlama Raveena Sarda    6 年前

    DateTime 是不可变的。当您使用 AddHours AddMinutes ,等等。它返回一个新的 日期时间 对象

    假设我们有这样的代码:

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

    会发生什么?

    1. 它将分配 日期时间 对象创建人 a.AddHours(1) b a 将保持不变。
    2. 接下来,它将分配 日期时间 对象创建人 a.AddMinutes(1) B A. 将保持不变。

    您需要做什么来修复此问题?您需要使用新的 日期时间 产生于 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);