我有一个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);
};
答案 0 :(得分:4)
您应该继续修改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
或者在 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
是不可变的。当您使用AddHours
或AddMinutes
等时,它会返回一个新的DateTime
对象。
所以我们假设我们有这样的代码:
DateTime a, b;
a = DateTime.Now;
b = a.AddHours(1);
b = a.AddMinutes(1);
会发生什么事?
DateTime
创建的a.AddHours(1)
对象分配给b
。 a
将保持不变。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);