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

假设我有3个时间范围:

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

和代码:

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

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

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

例如,一个TimeShift,其中:

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

那就意味着16.5个小时。

对于上面的示例:

代码语言:javascript
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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
代码运行次数:0
运行
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

复制
相关文章
Vue 在父(子)组件引用其子(父)组件方法和属性
<button @click="callChildMethod()">父组件调用子组件方法</button>
授客
2020/06/23
1.9K0
按照list中实体类的某一属性排序
传进一个装有实体类的list public void sort(List<MedicalPracticesDetail> mpdList){ Collections.sort(mpdList, new Comparator<MedicalPracticesDetail>(){ public int compare(MedicalPracticesDetail o1, MedicalPracticesDetail o2) { return o2.getOperatorTime
HUC思梦
2020/09/03
7250
SQL反模式学习笔记6 支持可变属性【实体-属性-值】
反模式:使用泛型属性表。这种设计成为实体-属性-值(EAV),也可叫做开放架构、名-值对。
张传宁IT讲堂
2019/09/17
1.2K0
JS魔法堂:再识ASCII实体、符号实体和字符实体
一、前言                                            相信大家都熟悉通过字符实体 &nbsp; 来实现多个连续空格的输入吧!本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢。 二、初识HTML实体                                                                    由于HTML中某些字符是预留的(如>和<等),若要在进行HTML解析出来后能正确显示预留字符,则需要
^_^肥仔John
2018/01/18
2.3K0
C#如何获取实体类属性名和值?
这里在数据初始化赋值后在控制台打印输出,调用了getProperties这个方法,
用户9127601
2022/06/09
2.1K0
POST @PostMapping接收实体类属性为null
@Data public class MailSender { private String Subject; private String Text; private String SetTo; private String SetFrom; private Map<String, String> Attachments; } 原因: 实体类属性必须遵循驼峰命名 @Data public class MailSender { private String s
鱼找水需要时间
2023/02/16
7510
POST @PostMapping接收实体类属性为null
短实体,长句实体抽取
“半指针-半标注”方法实体的抽取器,基于苏神的三元组抽取方法改造,这里取消了三元组抽取模型中对s的抽取,直接抽取实体并做分类(相当于直接抽取p和o)。改造后的实体抽取方法不仅可以运用于短实体的抽取,也可以运用到长句实体的抽取。
机器学习AI算法工程
2020/09/14
1.9K0
子类调用父类的同名方法和属性
在这里,定义Prentice类,继承了Master和School类,添加了和父类同名属性和方法
北山啦
2022/10/31
1.9K0
Rafy 升级:支持只查询实体的部分属性
Rafy 3.80.4005 添加了新功能:支持只查询部分属性的方式来查询实体。 本文记录对应的设计: 需求 测试用例 设计-API 设计-实现 代码实现 接下来就是实现内部的代码。完成之后,所有单元测试通过。
用户1172223
2021/10/26
6280
当阿里、京东拥抱实体经济
几乎是不约而同地,以阿里、京东为代表的互联网玩家们开始将目光转向了本来它们并不关注的实体经济,并且开始从实体经济的身上汲取新的发展力量。尽管连以阿里、京东为代表的互联网玩家们都不愿意承认这一点,但是,这一点却在真实地发生着。在我看来,这对于以阿里、京东为代表的互联网玩家们来讲是一件好事。无论是从自身的发展上来看,还是从整个行业的发展大趋势上来看,都是如此。
孟永辉
2022/11/18
1780
当阿里、京东拥抱实体经济
Mastercam 当车削导入实体时,如何快速对齐轴向?
数控编程、车铣复合、普车加工、Mastercam、行业前沿、机械视频,生产工艺、加工中心、模具、数控等前沿资讯在这里等你哦
lrglu
2023/10/24
3900
Mastercam 当车削导入实体时,如何快速对齐轴向?
SpringBoot中使用注解对实体类中的属性进行校验
注意:这来要也别注意一下 @NotNull、@NotNull、@NotBlank以及@NotEmpty注解的区别
Java学术趴
2022/06/28
5.1K0
SpringBoot中使用注解对实体类中的属性进行校验
EF实体中的修改
思路:先从ObjectContext取出实体,然后将前台传过来的DTO属性对应赋值到我们的实体上,然后调用ObjectContext的保证修改方法。
跟着阿笨一起玩NET
2018/09/19
1.1K0
[NewLife.XCode]实体工厂(拦截处理实体操作)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/07/02
1K0
实体识别(1) -实体识别任务简介
命名实体识别(Named Entity Recognition,简称NER) , 是指识别文本中具有特定意义的词(实体),主要包括人名、地名、机构名、专有名词等等,并把我们需要识别的词在文本序列中标注出来。
致Great
2023/08/25
5010
实体识别(1) -实体识别任务简介
解决Mybatis当实体类中的属性名和表中的字段名不一致的问题
实体类如下: public class OsEntity { private String Filesystem; private String Used; private String Mounted; ...get() and set() } 表中数据 filesystem used mounted test.txt 50 /file test2.txt 60 /file1 test3.txt 50 /file2 test4.txt 80 /file3 第一种
手撕代码八百里
2020/07/29
1.5K0
使用MyBatis时,解决表字段和实体类属性不一致问题
一、问题起因 我们经常会遇到表字段和实体类属性不一致问题,因为在sql中表的字段命名规则是每个单词用下划线隔开,而java中实体类属性的命名规则是每个单词直接采取驼峰命名,这样就会经常导致不一致问题! 二、不一致问题展示 表字段 实体类字段 @Data public class Test implements Serializable { private static final long serialVersionUID = 337361630075002456L; pr
掉发的小王
2022/07/11
1K0
使用MyBatis时,解决表字段和实体类属性不一致问题
json对象转换为实体类_对象和实体的区别
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/04
9270
实体-联系图(ER图)_实体关系图
我们通常用实体、联系和属性这三个概念来理解现实问题,因此ER模型比较接近人的思维方式。此外,ER模型用简单的图形符号表达系统分析员对问题域的理解,不熟悉计算机技术的用户也能理解它,因此,ER模型可以作为用户与分析员之间有效的交流工具。
全栈程序员站长
2022/09/29
2.3K0
实体-联系图(ER图)_实体关系图
《OEA - 实体扩展属性系统 - 设计方案说明书》
    这篇设计文档是 12 月份写来参加公司的研发峰会的,自己倒是信心满满,不过最后还是没有入围。现在想想也没啥大用,所以贴出来,期待与园友交流。     文档有点长,没全部贴在博客中,有兴趣的可以下载附件中的 PDF。  附件:《实体扩展属性系统-系统设计说明书.pdf》 ================= 分隔线 ====================== 目录 前言... 4 1 背景与需求... 5 1.1 产品 721 客户化开发的需要... 5 1.2 实体动态列... 6 1.3
用户1172223
2018/01/29
1.9K0
《OEA - 实体扩展属性系统 - 设计方案说明书》

相似问题

:mappedBy引用未知的目标实体属性

10

JPA mappedBy引用未知目标实体属性

13

mappedBy引用了未知的目标实体属性

30

AnnotationException:mappedBy引用未知的目标实体属性

10

注释异常: mappedBy引用未知目标实体属性

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文