格式化超过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时,就会出现格式错误的错误。我试过几种方法来解决这个问题,但都没有成功,有人知道如何解决这个问题吗?
这不是对您问题的回答,而是对不同方法的建议。我认为你试图以hh:mm
的形式获取持续时间会让用户感到困惑(如果我看到327:15
,我会惊讶的——这不是一种自然的读取时间的方式。当你谈论超过一两天时,这也很麻烦。
我建议使用不同的持续时间格式;类似于Xd Yh Zm
,其中X
、Y
和Z
分别是天、小时和分钟。每个部分都可以是可选的,但这将使用户更容易输入有问题的时间跨度,因为他们将输入自然时间单位。
然后,您可以使用正则表达式来尝试获取各个部分,并根据这些值构建一个实际的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")]