Mathematica,比较日期的有效方法

liu*_*ups 3 wolfram-mathematica

我有一个这样的列表:

{{2002, 4, 10}, 9.61}, {{2002, 4, 11}, 9.53}, {{2002, 4, 12}, 9.58},
Run Code Online (Sandbox Code Playgroud)

我需要查找此列表以找到日期的完全匹配,如果没有匹配,我将在列表中有下一个可用日期,这是我的代码:

Select[history, DateDifference[#[[1]], {2012, 3, 17}] <= 0 &, 1]
Run Code Online (Sandbox Code Playgroud)

但它比寻找完全匹配要慢很多,有没有更快的方法呢?非常感谢你!

Sza*_*lcs 5

确实,这DateDifference很慢.这可以通过将所有日期转换为"绝对时间"来解决,在Mathematica中表示自1900年1月1日以来经过的秒数.

这是一个例子.这是数据:

data = {AbsoluteTime[#1], #2} & @@@ 
   FinancialData["GOOG", {{2010, 1, 1}, {2011, 1, 1}}];
Run Code Online (Sandbox Code Playgroud)

如果没有,我们正在寻找这个日期或下一个日期:

date = AbsoluteTime[{2010, 8, 1}]
Run Code Online (Sandbox Code Playgroud)

检索它的一种方法是:

dt[[1 + LengthWhile[dt[[All, 1]], # < date &]]]
Run Code Online (Sandbox Code Playgroud)

您将在此问题的答案中找到其他方法,包括已经实现的二进制搜索.