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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:14:50