让我们做一些数学运算
您可以使用 7 个字母数字。每个字母数字从 36 个可能的不同值中取一个值(26 个字母,10 个十进制数字)
所以我们有 36^7 个不同的值,即 78364164096。
现在我们计算在一年中表示给定时间戳所需的不同值的数量。
为了简化一点,我们将允许一些永远不会发生的值(例如:11 月 31 日)。
因此,我们有
month: 12 -> coded from 0 to 11
day: 31 -> coded from 0 to 30
hour: 24
minute: 60
second: 60
这给出了使用 32140800 种不同的可能性
我们现在将 78364164096 / 32140800 相除,即 ~2438,因此我们将枚举从 0000 年 1 月 1 日 00:00 到 2437 年 12 月 31 日 23:59 的时间戳
那么编码就是
X = second + minute*60 + hour*60*60 +
day*60*60*24 + month*60*60*24*31 +
year*60*60*24*31*12
而解码是
second = X mod 60
minute = (X div 60) mod 60
hour = (X div 60*60) mod 24
day = (X div 60*60*24) mod 31
month = (X div 60*60*24*31) mod 12
year = X div 60*60*24*31*12
我们来看一个例子:
假设您想对 1998 年 12 月 20 日 05:33:12 的日期进行编码
所以你会有
second: 12
minute: 33
hour: 5
day: 19 -> note that we encode days in the range 0..31
month: 11 -> note that we conde months in the range 0..11
year: 1998
所以我们计算:
X = 12 + 33*60 + 5*60*60 +
19*60*60*24 + 11*60*60*24*31 +
1998*60*60*24*31*12
即X = 12 + 1980 + 18000 + 1641600 + 29462400 + 64217318400 = 64248442392
现在我们解码它
second = 64248442392 mod 60 = 12
minute = (64248442392 div 60) mod 60 = 33
hour = (64248442392 div 60*60) mod 24 = 5
day = (64248442392 div 60*60*24) mod 31 = 19
month = (64248442392 div 60*60*24*31) mod 12 = 11
year = 64248442392 div 60*60*24*31*12 = 1998