AddMinutes работает, но не AddHours? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть DatePicker и TimePicker для получения времени и даты вечера.
Мне удается получить значения от сборщиков и хочу сохранить их все в 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 голосов
/ 04 мая 2018

Ну, DateTime неизменен. Когда вы используете AddHours или AddMinutes и т. Д., Он возвращает новый DateTime объект.

Допустим, у нас есть такой код:

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

Что будет дальше?

  1. Он назначит объект DateTime, созданный a.AddHours(1), b. a останется без изменений.
  2. Далее он назначит объект DateTime, созданный a.AddMinutes(1), b. a останется без изменений.

Что нужно сделать, чтобы это исправить? Вам нужно использовать новый 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);
0 голосов
/ 04 мая 2018

Вы должны продолжать изменять 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); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...