Language agnostic 值间隔函数

Language agnostic 值间隔函数,language-agnostic,datetime,function,range,intervals,Language Agnostic,Datetime,Function,Range,Intervals,我目前正在处理许多可能不确定的日期跨度,即 StartDate EndDate --------- --------- 01JAN1921 31DEC2009 10OCT1955 null ... 区间的另一端可能未知或未定义。我一直在研究检测重叠的小函数,一个区间是否是另一个区间的子区间,计算两个区间之间的间距等等 例如,要检测重叠,问题是 S E S and E are the start and end o

我目前正在处理许多可能不确定的日期跨度,即

StartDate     EndDate
---------     ---------
01JAN1921     31DEC2009
10OCT1955     null
...
区间的另一端可能未知或未定义。我一直在研究检测重叠的小函数,一个区间是否是另一个区间的子区间,计算两个区间之间的间距等等

例如,要检测重叠,问题是

        S       E            S and E are the start and end of the interval
        |       |            we're comparing to. Here both are known, but
s1------+---e1  |            either could be null. The small s:s and e:s 
        |       |  s2....e2  define the intervals we're comparing to and
        |s3--e3 |            again we'd like to allow for open intervals.
        |   s4--+----e4
  s5..e5|       |
    s6--+-------+--s7
        |       |
根据与检测重叠相关的问题,您需要检查定义良好的间隔

    Coalesce(S,Coalesce(e-1,0))<Coalesce(e,Coalesce(S+1,1))
AND Coalesce(E,Coalesce(s+1,0))>Coalesce(s,Coalesce(E-1,1))
聚结(S,聚结(e-1,0))聚结(S,聚结(e-1,1)) 我想这是一件非常普遍的事情(不仅涉及日期或时间间隔),很多人都在处理它。我正在寻找现有的实现,最好是基于基本比较操作的函数。

是一个广泛而复杂的主题。C++/Boost有一个处理它的方法。我猜还有很多其他语言。这就是你要问的,还是太笼统了

至于时间间隔,有这个,你可能可以在“相关”侧栏中找到其他时间间隔。

是一个广泛而复杂的主题。C++/Boost有一个处理它的方法。我猜还有很多其他语言。这就是你要问的,还是太笼统了


关于时间间隔,有这样一种方法,你可以在“相关”侧栏中找到其他方法。

人们在程序中通常用三种方法表示日期

  • 在公历中,有年、月、日、时、分、秒。它非常健壮,但很难用它来做数学运算(每四年闰年一次,但不是世纪闰年,除非年份是400的倍数……你还记得吗?)
  • 作为自特定时间起的秒数,尽管这会产生问题,因为您必须选择是否计算闰秒(在线搜索“闰秒”,您将看到原因)
  • 在儒略历法中,指自某一特定日期起的天数和自该日期开始后的秒数
至于要用作参考的实现

  • Java就是一个不应该做的例子(伙计们,不要创建可变的日期时间类型)
  • Python也是一团糟(没有简单的方法来解析日期)
  • PostgreSQL很好地处理日期和时间。请参阅,您还可以查看源代码。它在内部使用儒略历
  • Haskell的标准时间库也很好,并且具有无限的范围和精度-没错,他们使用大整数表示朱利安日期,并使用大整数的比例表示时间。该库包括一系列有用的日期函数,其中一个用于计算复活节的日期。看

人们在节目中通常用三种方式表示日期

  • 在公历中,有年、月、日、时、分、秒。它非常健壮,但很难用它来做数学运算(每四年闰年一次,但不是世纪闰年,除非年份是400的倍数……你还记得吗?)
  • 作为自特定时间起的秒数,尽管这会产生问题,因为您必须选择是否计算闰秒(在线搜索“闰秒”,您将看到原因)
  • 在儒略历法中,指自某一特定日期起的天数和自该日期开始后的秒数
至于要用作参考的实现

  • Java就是一个不应该做的例子(伙计们,不要创建可变的日期时间类型)
  • Python也是一团糟(没有简单的方法来解析日期)
  • PostgreSQL很好地处理日期和时间。请参阅,您还可以查看源代码。它在内部使用儒略历
  • Haskell的标准时间库也很好,并且具有无限的范围和精度-没错,他们使用大整数表示朱利安日期,并使用大整数的比例表示时间。该库包括一系列有用的日期函数,其中一个用于计算复活节的日期。看

谢谢,+1的链接。我必须看看Boost库是否支持[1,无穷大]这样的间隔。谢谢,+1的链接。我必须看看Boost库是否支持[1,无穷大]这样的间隔。