将两个Unix时间戳编码为一个

Encoding two Unix timestamps into one

本文关键字:一个 编码 两个 Unix 时间戳      更新时间:2023-09-26

我的应用程序需要GET参数中的日期范围。我在想,一定有某种天才的方法可以将两个Unix时间戳编码为一个,从而有效地缩短URL参数。

我意识到两个时间戳的简单CSV就可以了,但这里的目标是尽可能减少URL大小。

PS:如果只有一个日期(开始日期(,也需要这样做,在这种情况下,结束日期将假设为今天。

好吧,这里有一些想法:

  • 如果这两个时间戳可能彼此接近,请将它们存储为第一个时间和差值的一对。例如,对于现在和明天,您将存储1361666257,86400

  • 以十六进制(以16为基数(而不是以10为基数存储时间戳;例如512960d1

  • 如果时间戳始终是日期,则通过除以86400并丢弃余数,将时间戳存储为自历元以来的天数,而不是秒。例如,今天是15760天。

和/或将这三者组合:3d90,1

如果您的目标是尽可能减少URL大小,那么您可以想出自己的"时间戳"格式,根据自己的方便选择粒度和偏移量。

例如,如果需要传递的日期通常在请求的当前日期前后,并且只需要日期而不需要时间,则可以使用前天的数量,而不是自1970年以来秒的数量

以下是unix时间戳和以下变体的随机日期范围:

Date range: 2012-09-21 to 2013-01-10
Timestamp:  1348178400_1357772400
Days-ago:   156_45

请注意,我使用_部分分隔开,因为在使用UNIX时间戳时,1970年之前的日期或在我的示例编码中的未来日期需要减号-

这只是一个例子。您应该根据应用程序的需要(或不需要(制定自己的编码。例如,如果日期范围通常很小,您可以将其编码为日期+差异。差异可能在几天、几个月或几年内。。。根据您的需要。

相关文章: