在我的数据库中,我会在几分钟内存储人们在任务上花费的时间。例如600分钟。 当我创建此任务时,我希望用户填写小时后跟分钟,例如: 30:20或30或1:20。 为了做到这一点,我做了以下
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan AllocatedTime { get; set; }
public int AllocatedMinutes { get; set; }
当用户在字段中输入他的信息时,他使用的是allocatetime,后来在Controller中转换为分钟。
问题是,只要输入的时间超过23:59,就会出现错误格式的错误。 我已经尝试过几个方法来解决这个问题,但它没有解决,有没有人知道如何解决这个问题?
答案 0 :(得分:0)
这不是您问题的答案,而是对不同方法的建议。我认为你试图以hh:mm
的形式获得持续时间会让用户感到困惑(如果我看到327:15
,我会挑起眉毛 - 这不是一种自然的阅读时间方式。这也很麻烦你谈的是一两天以上。
我建议使用不同的持续时间格式;像Xd Yh Zm
这样的地方X
,Y
和Z
分别是天,小时和分钟。每个部分都可以是可选的,但这会使用户更容易输入有问题的时间跨度,因为他们将进入自然时间单位。
然后,您可以使用正则表达式尝试获取各个部分并从值中构建实际的TimeSpan
。
这个正则表达式可能是一个开始:
(?:(?<days>\d+)d\s)?\s*(?:(?<hours>\d+)h\s)?\s*(?:(?<minutes>\d+)m)?
注意:我只测试了几分钟,因此可能无法涵盖所有可能性,但它应该是一个足够好的开始。
答案 1 :(得分:0)
经过尝试和尝试......我终于明白了:
[RegularExpression(@"^[0-9][0-9]?[0-9]?(:[0-5][0-9])?$", ErrorMessage = "wrong")]