格式超过24小时

时间:2014-11-11 21:39:38

标签: c# sql-server asp.net-mvc dataformat

在我的数据库中,我会在几分钟内存储人们在任务上花费的时间。例如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,就会出现错误格式的错误。 我已经尝试过几个方法来解决这个问题,但它没有解决,有没有人知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这不是您问题的答案,而是对不同方法的建议。我认为你试图以hh:mm的形式获得持续时间会让用户感到困惑(如果我看到327:15,我会挑起眉毛 - 这不是一种自然的阅读时间方式。这也很麻烦你谈的是一两天以上。

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

然后,您可以使用正则表达式尝试获取各个部分并从值中构建实际的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")]