如何在C#项目的MudBlazor MudTimePicker中选择24:00而非00:00?
在MudBlazor中实现MudTimePicker支持00:00到24:00选择
MudBlazor的MudTimePicker默认仅支持00:00到23:59的时间范围,要实现包含24:00的选择,可通过自定义时间选项、格式化逻辑来处理,以下是具体实现方案:
1. 生成自定义时间选项列表
先创建包含24:00的时间选项集合,替换组件默认的时间列表,可按需设置时间间隔(比如整小时、15分钟间隔等):
private TimeSpan? SelectedEndTime { get; set; } private List<TimeSpan> CustomTimeOptions { get; set; } protected override void OnInitialized() { CustomTimeOptions = new List<TimeSpan>(); // 生成00:00到23:59的时间(以整小时为例) for (int hour = 0; hour < 24; hour++) { CustomTimeOptions.Add(TimeSpan.FromHours(hour)); // 若需要更细的间隔(如15分钟),可取消注释以下代码: // for (int minute = 15; minute < 60; minute += 15) // { // CustomTimeOptions.Add(TimeSpan.FromHours(hour) + TimeSpan.FromMinutes(minute)); // } } // 添加24:00选项(用TimeSpan.Zero作为底层存储值,后续通过格式化区分显示) CustomTimeOptions.Add(TimeSpan.Zero); }
2. 配置MudTimePicker组件
绑定自定义时间列表,设置24小时格式,同时添加自定义显示和解析逻辑:
<MudTimePicker @bind-SelectedTime="SelectedEndTime" TimeList="CustomTimeOptions" TimeFormat="HH:mm" TValue="TimeSpan?" ToStringFunc="@FormatDisplayTime" ParseFunc="@ParseInputTime" Label="结束时间" Placeholder="选择时间"> </MudTimePicker>
3. 实现显示格式化函数
让选中的24:00在组件中显示为"24:00",而非默认的"00:00":
private string FormatDisplayTime(TimeSpan? time) { // 判断是否为代表24:00的选项 if (time == TimeSpan.Zero && CustomTimeOptions.Contains(TimeSpan.Zero)) { return "24:00"; } return time?.ToString(@"HH\:mm") ?? string.Empty; }
4. 实现输入解析函数
支持用户手动输入"24:00"并正确解析为对应的底层值:
private TimeSpan? ParseInputTime(string input) { if (string.IsNullOrWhiteSpace(input)) return null; var trimmedInput = input.Trim(); if (trimmedInput.Equals("24:00", StringComparison.OrdinalIgnoreCase)) { return TimeSpan.Zero; } if (TimeSpan.TryParseExact(trimmedInput, @"HH\:mm", null, out var parsedTime)) { return parsedTime; } return null; }
5. 业务逻辑处理
在后续业务代码中,只需判断SelectedEndTime是否为TimeSpan.Zero,即可视为用户选择了24:00:
if (SelectedEndTime == TimeSpan.Zero) { // 处理24:00的业务逻辑,比如存储为24小时的数值 } else { // 处理常规时间逻辑 }
该方案无需将00:00临时当作24:00处理,而是通过自定义选项和格式化逻辑,让组件原生支持24:00的选择与显示。
内容的提问来源于stack exchange,提问作者Josef Sommerauer
相关产品推荐
相关产品推荐

