日期不适合 不同测量级别的 Stevens 类型学https://en.wikipedia.org/wiki/Level_of_measurement#Ordinal_scale是正确的。日期当然是有序的,所以我们可以说日期是序数类型,但它们肯定不止于此。在这个意义上专门谈论天时,天文学家使用儒略天。
我认为您的问题是我们可以为日期集(或更一般的日期/时间)赋予什么数学结构。那是关于时间的数学表示,我们通常以至少两种方式谈论时间:事件(“什么时候发生的事情”)和持续时间“平昌上届冬季奥运会持续了多长时间”?如果是开幕式的日期,是闭幕式的日期,则持续时间是。所以我们可以取两个事件(日期)的差值;这种差异是持续时间。但是我们不能将两个事件(日期)相加,那么应该是什么意思?但冬奥会的中途是有意义的;这是平均。所以平均值是有道理的!PQQ−PP+Q0.5P+0.5Q
这看起来像一个奇怪的数学结构,有两种对象“事件”和“持续时间”,操作仅在某些情况下定义,而不是全部。但它是一个非常有名的对象,一个仿射空间;见https://en.wikipedia.org/wiki/Affine_space。
引入仿射空间的常用方法是说它是“我们忘记了原点”的向量空间。由于我们忘记了原点,任何结果取决于原点的操作都是无效的或未定义的。我们现在可以将“事件”(日期)定义为底层(1-dim)向量空间中的向量,我们可以用实线来识别它。但请注意,这种表示取决于来源的选择!我们必须记住,我们实际所做的任何事情都不能依赖于这个选择。
我们可以将“持续时间”表示为表示日期的向量之间的差异。很明显,冬奥会的持续时间并不取决于我们选择基督诞生的时间起源还是 1970 年 1 月 1 日(linux 中使用的时间起源)。事件的平均值也有意义:如果我们把事件写成,那么 P_i 的平均值一个事件使得
(在仿射几何中通常被称为重心。)注意在这里我们只是对持续时间求和,这是允许的。PiPiQ∑i(Pi−Q)=0
Q
如果我们想在计算环境中实现某种表示日期的数据类型,它必须具有这些属性。让我们在 R 中看到:
P <- as.Date("2018-2-9") # Starting date of Olympics
Q <- as.Date("2018-2-25") # end date
Q-P # duration
Time difference of 16 days
Q+P
Error in `+.Date`(Q, P) : binary + is not defined for "Date" objects
mean(c(P, Q)) # time midpoint of the games
[1] "2018-02-17"
weighted.mean(c(P, Q), c(1/4, 3/4)) # games 3/4-finnished.
[1] "2018-02-21"
P+16 # 16 days after the opening ceremony
[1] "2018-02-25"
这一切似乎都很好。