You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DatePicker和TimePicker时AddMinutes正常但AddHours失效问题排查

解决DatePicker+TimePicker整合DateTime时AddHours无效的问题

哥们,我之前也踩过这个坑!咱们来一步步揪出问题所在,大概率是两个常见原因之一:

1. 最容易忽略的:DateTime是不可变类型!

你是不是直接这么写的?

DateTime eventDate = new DateTime(dps.Year, dps.Month, dps.DayOfMonth);
eventDate.AddHours(selectedHour); // 这里完全没用!
eventDate.AddMinutes(selectedMinute);

DateTime的所有Add方法(AddHours、AddMinutes等)都不会修改原对象,而是返回一个新的DateTime实例。你必须把返回值重新赋值给变量,才会生效:

// 正确写法:赋值返回值
DateTime eventDate = new DateTime(dps.Year, dps.Month, dps.DayOfMonth);
eventDate = eventDate.AddHours(selectedHour);
eventDate = eventDate.AddMinutes(selectedMinute);

// 或者更简洁的链式调用
DateTime eventDate = new DateTime(dps.Year, dps.Month, dps.DayOfMonth)
    .AddHours(selectedHour)
    .AddMinutes(selectedMinute);

这个是最常见的错误,很多人第一次用DateTime都会忘它的不可变性。

2. TimePicker的小时取值可能是12小时制,导致数值错误

如果你的TimePicker是12小时模式(带AM/PM选择),直接取Hour值可能会得到1-12的数字,而不是24小时制的0-23。比如选了下午2点,直接取到的是2而不是14,这时候AddHours(2)就会把时间加到凌晨2点,看起来像是没生效。

解决办法是先把小时转换为24小时制:

TimePicker tp = FindViewById<TimePicker>(Resource.Id.your_timepicker_id);
int selectedHour = tp.Hour;
int selectedMinute = tp.Minute;

// 处理12小时制的转换
if (!tp.Is24HourView)
{
    if (tp.CurrentHour == 12)
        selectedHour = 0; // 上午12点(午夜)转成0
    else if (tp.CurrentHour > 12)
        selectedHour = tp.CurrentHour - 12; // 下午1点转成13,以此类推
}

完整示例代码

把这两点结合起来,完整的整合代码应该是这样的:

// 获取DatePicker日期
DatePicker dps = FindViewById<DatePicker>(Resource.Id.Start_dp);
int year = dps.Year;
int month = dps.Month;
int day = dps.DayOfMonth;

// 获取TimePicker时间并处理
TimePicker tp = FindViewById<TimePicker>(Resource.Id.your_timepicker_id);
int selectedHour = tp.Hour;
int selectedMinute = tp.Minute;

// 12小时制转24小时制
if (!tp.Is24HourView)
{
    selectedHour = tp.CurrentHour switch
    {
        12 => 0,
        >12 => tp.CurrentHour - 12,
        _ => tp.CurrentHour
    };
}

// 正确整合DateTime
DateTime eventDateTime = new DateTime(year, month, day)
    .AddHours(selectedHour)
    .AddMinutes(selectedMinute);

先检查是不是忘记赋值AddHours的返回值,这个90%概率是问题所在;如果不是,再看TimePicker的小时取值是否正确。

内容的提问来源于stack exchange,提问作者user3794667384

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:00