gpt4 book ai didi

c# - 根据时间间隔验证时间

转载 作者:行者123 更新时间:2023-11-30 21:41:21 25 4
gpt4 key购买 nike

我有三个规则:

  • A.上午 9 点到下午 3 点之间的时段
  • B.下午 3 点到 7 点之间的时间段
  • C.晚上 7 点到早上 9 点之间的时段

目前我将它们表示为 TimeSpans

public class Rule
{
public string Name {get; set;}
public TimeSpan From {get; set;}
}

List<Rule> rules = new List<Rule>()
{
new Rule() {From = new TimeSpan(9, 0, 0), Name = "A"},
new Rule() {From = new TimeSpan(15, 0, 0), Name = "B"},
new Rule() {From = new TimeSpan(19, 0, 0), Name = "C"}
};

我的问题是如何根据该规则验证时间输入,比如晚上 9 点 10 分?

它应该选择第三条规则。

最佳答案

通过向 Rule 对象添加结束时间进行轻微修改

public class Rule {
public string Name { get; set; }
public TimeSpan From { get; set; }
public TimeSpan To { get; set; }
}

此扩展方法用于检查提供的输入是否在规则的时间范围内。

public static class RuleExtension {
public static bool Contains(this Rule rule, TimeSpan input) {
var value = TimeSpan.Parse(input.ToString());
var start = rule.From;
var end = rule.To;

if (end < start) {
//loopback
end += TimeSpan.FromHours(24);
if (value < start)
value += TimeSpan.FromHours(24);
}

return start.CompareTo(value) <= 0 && value.CompareTo(end) < 0;
}
}

以下单元测试用于验证扩展方法并从集合中提取规则。 (注意:使用 FluentAssertions 断言结果。)

[TestClass]
public class MyTestClass {
[TestMethod]
public void _ValidateTime() {
var rules = new List<Rule>()
{
new Rule() {From = new TimeSpan(9, 0, 0), To = new TimeSpan(15, 0, 0), Name = "A"},
new Rule() {From = new TimeSpan(15, 0, 0), To = new TimeSpan(19, 0, 0), Name = "B"},
new Rule() {From = new TimeSpan(19, 0, 0), To= new TimeSpan(5, 0, 0), Name = "C"}
};

var input = TimeSpan.Parse("21:10");
rules.FirstOrDefault(r => r.Contains(input))
.Should()
.NotBeNull()
.And
.Match((Rule r) => r.Name == "C");

input = TimeSpan.Parse("08:10");
rules.FirstOrDefault(r => r.Contains(input))
.Should()
.BeNull();

input = TimeSpan.Parse("18:10");
rules.FirstOrDefault(r => r.Contains(input))
.Should()
.NotBeNull()
.And
.Match((Rule r) => r.Name == "B");

input = TimeSpan.Parse("10:10");
rules.FirstOrDefault(r => r.Contains(input))
.Should()
.NotBeNull()
.And
.Match((Rule r) => r.Name == "A");
}

关于c# - 根据时间间隔验证时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com