首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c#检查timespan范围是否在timespan范围和多少小时之间

c#检查timespan范围是否在timespan范围和多少小时之间
EN

Stack Overflow用户
提问于 2016-12-01 23:43:25
回答 5查看 4.3K关注 0票数 4

假设我有3个时间范围:

代码语言:javascript
运行
AI代码解释
复制
07:00 - 18:00  
18:00 - 23:00  
23:00 - 07:00  

和代码:

代码语言:javascript
运行
AI代码解释
复制
public class TimeShift
{
   public TimeSpan Start { get; set; }
   public TimeSpan End { get; set; }
}

List<TimeShift> shifts = new List<TimeShift>();

如何检查列表中的每一项是否都在上述3个范围和多少小时之间?

例如,一个TimeShift,其中:

代码语言:javascript
运行
AI代码解释
复制
Start: 07:00
End:   23:30

那就意味着16.5个小时。

对于上面的示例:

代码语言:javascript
运行
AI代码解释
复制
Range 1: 11 hours  
Range 2: 5 hours  
Range 3: 0.5 hours  
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-02 00:28:09

下面是一个包含测试的解决方案:

计算

代码语言:javascript
运行
AI代码解释
复制
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;
    }
}

代码语言:javascript
运行
AI代码解释
复制
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; }
}

测试

代码语言:javascript
运行
AI代码解释
复制
[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));
}
票数 5
EN

Stack Overflow用户

发布于 2016-12-02 00:07:56

您使用了错误的类型。StartEnd应该是DateTime,而不是TimeSpanEnd.Subtract(Start)将提供一个TimeSpan作为其结果。TimeSpan类型具有将提供总小时数、分钟数等的属性。

TimeSpan属性(https://msdn.microsoft.com/en-us/library/system.timespan_properties(v=vs.110%29.aspx)

票数 0
EN

Stack Overflow用户

发布于 2016-12-02 00:08:19

我建议在您的类中添加一个表示start和end之间实际差异的方法。例如,将其称为timespan TimeDiff。您需要包含一条if语句,以确认TimeLater小于TimeEnd且TimeEarlier大于TimeStart。然后是'TimeDiff = TimeLater - TimeEarlier‘。

TimeLater是提供的范围的末尾。TimeEarlier是提供的范围的开始。

如果你想计算从TimeEnd到TimeStart的时间跨度,你只需要检查TimeEarlier是否大于TimeLater,并且有逻辑来计算差值。它将沿着TimeDiff = (TimeEnd - TimeEarlier) + (TimeLater - TimeEnd)的方向进行。

要完成timespan减法,请在所有timespan中使用.Subtract()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40922409

复制
相关文章
Apache POI Strict OOXML isn’t currently 错误
这是因为你的 Excel 保存的格式版本为 Strict Open XML 格式。
HoneyMoose
2020/12/05
2K0
Apache POI Strict OOXML isn’t currently 错误
POI合并单元格
核心代码: CellRangeAddress region = new CellRangeAddress(rowNum2-(chongfucishu-1), rowNum2, 0, 0); sheet2.addMergedRegion(region); //year1 年份重复的 for (String key : map_year1.keySet()) { String years = key;//重
手撕代码八百里
2020/07/28
1.4K0
POI解析单元格格式
需要注意的是:在调用getCellValue方法之前不用设置该单元格格式,否则解析有可能不成功(因为你不知道单元格格式,除非你采用getCellValue方法内部的方式判断--冗余代码)。
johnhuster的分享
2022/03/28
7850
POI解析单元格格式
【POI框架实战】——POI设置Excel单元格格式
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/49911537
DannyHoo
2018/09/13
5.3K0
【POI框架实战】——POI设置Excel单元格格式
Apache POI总结 原
Apache POI  是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
wuweixiang
2018/08/14
1.1K0
Apache POI使用详解[通俗易懂]
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel
全栈程序员站长
2022/09/14
5K0
Apache POI使用详解[通俗易懂]
POI判断某个单元格是否是合并单元格
注:比如我们的数据是上面N个单元组成,且每个单元所占行数可能不同。第一列占据一列,中间数据每个占用一个单元格,最后一列与第一列占用相同的行数,这时我们需要获取起始单元格占用几行(起始行--结束行),获取到这些数据后我们就能读取中间单元格数据(这些数据可以作为上面单元的一个属性),下面给出具体代码:
johnhuster的分享
2022/03/28
3.2K0
POI判断某个单元格是否是合并单元格
POI读取excel某个单元格内容
POI是一个不错的库,我们可以使用这个库读写EXCEL,WORD等类型文件,EXCEL尤其使用比较广泛,下面直接给出代码:
johnhuster的分享
2022/03/28
8660
poi设置单元格下拉下表
poi是读写excel最常用的一个开源中间件,实际使用中我们可能会遇到这样的需求:限制某列单元格只能输入特定的内容,这就是excel的下拉列表特性,以下是wps中excel的一个截图:
johnhuster的分享
2022/03/28
1.1K0
poi设置单元格下拉下表
数据驱动框架(Apache POI – Excel)
自动化测试框架是用于创建和设计测试用例的一组准则或规则。该准则包括编码标准,对象存储库,测试数据处理方法,存储测试结果的过程或有关如何访问外部资源的任何其他信息。
用户8460142
2023/07/07
3160
数据驱动框架(Apache POI – Excel)
【POI框架实战】——POI导出Excel时设置单元格类型为数值类型
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/49786227
DannyHoo
2018/09/13
5.3K0
【POI框架实战】——POI导出Excel时设置单元格类型为数值类型
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
你好!这是由一个刚毕业的学生,由于项目所需,需要通过Java后台的方式打印Word文档,因此在对大量能操作word的Java API中,选择了Apache POI。以下将简单分享一下这个在学习和开发这个基于POI的word文档打印工具时,一些心得:
RRT冻羊
2022/11/03
4.1K0
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
Excel文件导入导出操作
日常开发工作中对于文件的相关操作大家多少都会涉及:上传解析、数据导出等。此篇内容主要分享一下工作中常用的Excel文件的解析和导出工作类实现。
沁溪源
2020/10/13
1.3K0
java中poi导出模板下拉框实现二级联动
代码实现如下: 需要加入的jar包: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version>
崔笑颜
2020/06/08
3.5K0
POI -纯java代码实现导出excel表格
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。 HWPF - 提供读写Microsoft Word格式档案的功能。 HSLF - 提供读写Microsoft PowerPoint格式档案的功能。 HDGF - 提供读写Microsoft Visio格式档案的
小帅丶
2018/02/08
2.7K0
Apache POI 读取 Microsoft Office Excel 文档
Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准(OOXML)和微软的 OLE 2 Compound Document 格式(OLE2)。
HoneyMoose
2020/12/03
6630
Apache POI 读取 Microsoft Office Excel 文档
通过 Excel 来认识神器 Apache POI
Apache POI - the Java API for Microsoft Documents,顾名思义,Apache的三方包,用来操作微软office文档的,多数时候用来操作excel,所以这里就以excel方面来说明。
二哥聊运营工具
2021/12/17
1K0
通过 Excel 来认识神器 Apache POI
Java操作Office:POI之word生成
最近在项目开发中,有数据导出到word的需求。这就涉及代码生成word文档的操作,且有格式要求。大家用word做过简历的都有了解,做简历时,会使用表格、图片、文字等元素。而且表格也可能有嵌套、合并单元格,以及插入图片到单元格的操作。该怎么做?
程序员架构进阶
2021/08/23
2.6K0
Java操作Office:POI之word生成
Java操作Office:POI之word生成
最近在项目开发中,有数据导出到word的需求。这就涉及代码生成word文档的操作,且有格式要求。 大家用word做过简历的都有了解,做简历时,会使用表格、图片、文字等元素。而且表格也可能有嵌套、合并单元格,以及插入图片到单元格的操作。该怎么做?
程序员架构进阶
2021/08/06
6K0
JavaWeb中将数据从数据库导出到Excel表的实例
这个博客里面开发的项目,使用POI导出Excel,经过修改支持文件弹窗选择,在使用中包括以下几步。 1.添加jar包
geekfly
2022/04/24
1.1K0
JavaWeb中将数据从数据库导出到Excel表的实例

相似问题

Kafka Streams内部主题命名

52

Kafka Streams内部主题重定向

121

Kafka Streams死信队列/隔离主题

15

kafka streams in runtime change in/out主题

110

Kafka Streams -共享的变更主题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档