【问题标题】:Searching for a method to find out if a period of time is between 2 DateTimes [duplicate]寻找一种方法来确定一段时间是否在2个日期时间之间[重复]
【发布时间】:2021-02-03 09:22:30
【问题描述】:

我正在寻找一种方法来确定一段时间是否介于 2 个日期时间之间。例如,在一个列表中,我在一个对象中有一段时间(开始和结束)时间。喜欢

开始:下午 16:00,结束:晚上 17:00

我有一个表单,它允许用户在这个现有列表中添加一段时间。例如,用户可以在表单中输入以下内容:

开始:下午 16:30,结束:晚上 17:40

如果用户输入的时间段不存在,我如何检查列表中的 foreach 对象?

在此示例中,用户输入 16:30 介于 16:00 和 17:00 之间,这是不允许的。我该怎么做?

请务必让我知道它的问题需要更多解释。

【问题讨论】:

  • 我不允许使用外部库 :( 但是如果我不理解这篇文章是错误的,那么它不存在我在 .net 中解决问题的方法
  • @InvictusWarrior 你不需要整个库,只需两个简单的比较:a.start < b.end && b.start < a.end。至于I am not allowed to use external librarys,你不能在没有“外部”库的情况下使用.NET。甚至系统库也作为 NuGet 包发布。每次编译项目时,它都会从 NuGet 恢复很多包

标签: c# winforms datetime duration timespan


【解决方案1】:
bool IsWithin(DateTime firstStart, DateTime firstEnd, DateTime secondStart, DateTime secondEnd) {
    long fs = firstStart.ToFileTime();
    long fe = firstEnd.ToFiletime();
    long ss = secondStart.ToFileTime();
    long se = secondEnd.ToFileTime();
    return fs > ss && fe < se;
}

此方法获取四个日期,如果第一个周期在第二个周期内,则返回。然后你只需检查这个方法是否返回所有对象。希望这对你有帮助:)

【讨论】:

  • 为什么使用ToFileTime而不是直接比较值?
  • 唯一能做的就是将滴答计数基数从0001-01-01 更改为1601-01-01。考虑到比较的速度有多快,仅firstStart.ToFileTime() 就比firsttStart &gt; secondStart 更昂贵。 DateTime 在内部存储一个滴答计数,the comparison operators 比较滴答值
  • 每次都不起作用,例如失败:第一次:09:00-10:00 第二次:09:02-10:01 您的方法说它不在这段时间内,但这是错误的:(
  • @InvictusWarrior 那是因为您想查找两个范围是否重叠,而此方法会告诉您一个范围是否完全在另一个范围内。跨度>
  • return (firstStart > secondStart && firstStart secondStart && firstEnd
猜你喜欢
  • 2016-06-28
  • 2020-10-07
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
相关资源
最近更新 更多