- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有 3 个时间范围:
07:00 - 18:00
18:00 - 23:00
23:00 - 07:00
和代码:
public class TimeShift
{
public TimeSpan Start { get; set; }
public TimeSpan End { get; set; }
}
List<TimeShift> shifts = new List<TimeShift>();
如何检查列表中的每一项是否都在上述 3 个范围内以及多少小时之间?
例如一个 TimeShift
其中:
Start: 07:00
End: 23:30
那么这意味着 16.5 小时。
对于上面的例子:
Range 1: 11 hours
Range 2: 5 hours
Range 3: 0.5 hours
最佳答案
这是一个包含测试的解决方案:
public class TimeSpacCalculator
{
public static TimeSpan GetTimeSpanIntersect(TimeShift input, TimeSpan start, TimeSpan end)
{
// Loopsback input from 23:59 - 00:00
if (input.Start > input.End)
return GetTimeSpanIntersect(new TimeShift(input.Start, TimeSpan.FromHours(24)), start, end) +
GetTimeSpanIntersect(new TimeShift(TimeSpan.FromHours(0), input.End), start, end);
// Loopsback Shift from 23:59 - 00:00
if (start > end)
return GetTimeSpanIntersect(input, new TimeSpan(), end) +
GetTimeSpanIntersect(input, start, TimeSpan.FromHours(24));
if (input.End < start)
return new TimeSpan();
if (input.Start > end)
return new TimeSpan();
var actualStart = input.Start < start
? start
: input.Start;
var actualEnd = input.End > end
? end
: input.End;
return actualEnd - actualStart;
}
}
public class TimeRange : TimeShift
{
public TimeRange(string name, TimeSpan start, TimeSpan end) : base(start, end)
{
Name = name;
}
public string Name { get; set; }
}
public class TimeShift
{
public TimeShift(TimeSpan start, TimeSpan end)
{
Start = start;
End = end;
}
public TimeSpan Start { get; set; }
public TimeSpan End { get; set; }
}
[TestFixture]
internal class TimShiftTests
{
[Test]
[TestCase(7, 23.5, 11, 5, 0.5)]
[TestCase(22, 7.5, 0.5, 1, 8)]
public void Test(double inputStartHours, double inputEndHours, double expectedRange1Hours, double expectedRange2Hours, double expectedRange3Hours )
{
var input = new TimeShift(TimeSpan.FromHours(inputStartHours), TimeSpan.FromHours(inputEndHours));
var ranges = new List<TimeRange>
{
new TimeRange("Range1", TimeSpan.FromHours(7), TimeSpan.FromHours(18)),
new TimeRange("Range2", TimeSpan.FromHours(18), TimeSpan.FromHours(23)),
new TimeRange("Range3", TimeSpan.FromHours(23), TimeSpan.FromHours(7))
};
var result = new Dictionary<string, TimeSpan>();
foreach (var range in ranges)
{
var time = TimeSpacCalculator.GetTimeSpanIntersect(input, range.Start, range.End);
result.Add(range.Name, time);
Console.WriteLine($"{range.Name}: " + time.TotalHours);
}
result["Range1"].Should().Be(TimeSpan.FromHours(expectedRange1Hours));
result["Range2"].Should().Be(TimeSpan.FromHours(expectedRange2Hours));
result["Range3"].Should().Be(TimeSpan.FromHours(expectedRange3Hours));
}
关于c#检查时间跨度范围是否在时间跨度范围和多少小时之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922409/
这就是我现在正在做的事情。我在设计中使用 LESS CSS。我需要在指定输入之间放置 2 个跨度。所有元素的宽度都应为 100%。跨度应始终为 20px 宽度输入宽度可以根据屏幕宽度进行更改。谁能帮帮
我有一个包含文本和输入字段的跨度。我想知道是否可以让文本左对齐,输入字段右对齐。 NAME: .textBox{ display:inline-block; width:450px
我有这个按钮,我想让它在我点击“选择”时调用方法,在我点击“更改”时调用另一个方法: Select Change 我尝试输入 (click)="method()",但没有成功。我很
我正在开发聊天应用程序 (cordova),当我要在无法输入的表情符号后输入文本时,我在这段代码中遇到了问题 https://output.jsbin.com/radaref This i
很抱歉,如果这是一个非常愚蠢的问题,但我是一名开发人员,目前我的设计技能很少,我在个人网站上工作并且遇到了一个小问题。 我有一个带 ul 的顶部导航和 li元素。这些元素包含链接 . 跨度仅在链接悬
fiddle :https://jsfiddle.net/burz4g8s/4/ 我的 HTML 包含多行双按钮对。服务器端应用程序在 JSP 循环中输出按钮,所以我无法控制各个按钮——我不能使用 d
TextView.setLetterSpacing允许设置字母间距/字符间距。 有没有对应的CharacterStyle / span class允许在 TextView? 中的文本子集上设置字母间距
如何使洋红色矩形比红色矩形短 6 倍? GridLayout { id: gridLayout anchors.fill: parent flo
我最近开始使用 Twitter Bootstrap,但我似乎无法理解 span 的作用以及为什么会有不同的编号 span,例如 span4、span12?什么是偏移量以及它们何时使用? (有时与跨度一
我正在尝试构建一个 jQuery 函数来计算跨度中的总数 var sumnormaltotal = 0; $('span[id^="normaloffertotalspan"]').each(func
我想知道haskell如何评估以下表达式。 span (`elem` ['A'..'Z']) "BOBsidneyMORGANeddy" 结果是 ("BOB","sidneyMORGANeddy")
我有三个词,我想在第一个空格之后的内容周围添加一个跨度,所以 hello world 变成: hello world 和: hello world again 变成: hello world agai
我正在寻找纯 CSS 解决以下问题的方法。 考虑以下 HTML: Some text Some text 两者都是 正在显示元素 inline-block .如何在第二个 的左侧
如何将 Span 放置在其容器的底部? 我目前拥有的:http://jsfiddle.net/wRbax/2/ 我希望 .box 始终位于 .td 的底部 CSS .td { vertical
我试图在 li 中 float 两个 span。左跨度将有我的标签,在右跨度内我将构建一个具有嵌套跨度的图形。我有基本结构,但 chrome 将数字放在左侧跨度的末尾。我该如何解决这个问题? HTML
我有一个像这样的 JavaScript 变量: var text = "A businessman should be able to manage his business matters"; 我想
一些内容可编辑的框与其他框重叠,因此并非所有框都是可编辑的。我想保留与跨度位置中心对齐的文本,如下所示。我如何实现这一点? span { margin: auto; text-alig
我正在使用 WYSIWYG (InnovaEditor) 来编辑我网站上的内容,它适用于 Chrome、IE,主要适用于 Firefox,但 FF 有一个稍微令人讨厌的问题。我将 span 标签插入到
这是我的 html: Settings Export Import 和CSS: span.button { float:right; margin-righ
这里是问题所在:http://jsfiddle.net/STG22/3/ 我希望 span 不会分成两个不同的行(就像上面示例中的第三行一样)。我该怎么做? CSS: span { backg
我是一名优秀的程序员,十分优秀!