格式化超过24小时

本文关键字:24小时 格式化 | 更新日期: 2023-09-27 18:30:06

在我的数据库中,我以分钟为单位存储人们在任务上花费的时间。例如600分钟。创建此任务时,我希望用户填写"小时"answers"分钟",例如:30:20或30或1:20。为了做到这一点,我做了以下

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh':mm}")]
public TimeSpan AllocatedTime { get; set; }
public int AllocatedMinutes { get; set; }

当用户在字段中输入信息时,他使用allocatedtime,稍后在Controller中将其转换为分钟。

但问题是,每当输入的时间超过23:59时,就会出现格式错误的错误。我试过几种方法来解决这个问题,但都没有成功,有人知道如何解决这个问题吗?

格式化超过24小时

这不是对您问题的回答,而是对不同方法的建议。我认为你试图以hh:mm的形式获取持续时间会让用户感到困惑(如果我看到327:15,我会惊讶的——这不是一种自然的读取时间的方式。当你谈论超过一两天时,这也很麻烦。

我建议使用不同的持续时间格式;类似于Xd Yh Zm,其中XYZ分别是天、小时和分钟。每个部分都可以是可选的,但这将使用户更容易输入有问题的时间跨度,因为他们将输入自然时间单位。

然后,您可以使用正则表达式来尝试获取各个部分,并根据这些值构建一个实际的TimeSpan

这个正则表达式可能是一个开始:

(?:(?<days>'d+)d's)?'s*(?:(?<hours>'d+)h's)?'s*(?:(?<minutes>'d+)m)?

注意:我只测试了几分钟,所以它可能不会涵盖所有的可能性,但这应该是一个足够好的开始。

经过一次又一次的尝试。。。我终于想明白了:

[RegularExpression(@"^[0-9][0-9]?[0-9]?(:[0-5][0-9])?$", ErrorMessage = "wrong")]