按字典顺序升序排序的日期字符串格式是按时间顺序降序排列?

Amb*_*ana 8 sorting algorithm date date-sorting

将日历日期编码为以下YYYY-MM-DD格式的字符串(带或不带分隔符,例如2014-04-21,2014.04.2120140421)具有以下属性:

\n\n
    \n
  • 按字典顺序升序对字符串进行排序(将它们视为简单字符串,不知道它们代表什么)将它们按时间顺序排列
  • \n
  • 日历日期和字符串之间的转换对于人类来说是显而易见的(2014-04-21显然代表April 21, 2014
  • \n
\n\n

请注意,为此,日期的每个组成部分(年、月和日)必须始终使用相同数量的字符,如果数字太小,则使用前导零。这意味着YYYY最多只能代表年9999。如果我们也想表示 5 位数的年份,那么上面示例中的日期就变成02014-04-21

\n\n

问题:

\n\n

有没有一种方法可以将日历日期编码为字符串,以便按字典顺序升序对字符串进行排序,使它们按时间顺序逆序排列?

\n\n

理想情况下,人们很容易在日历日期和您建议的格式之间进行转换,但即使您不管理这个(我下面的解决方案不管理)我仍然想知道您的解决方案。

\n\n

如果有帮助,您可能需要此限制:

\n\n
    \n
  • 我只需要表示 2001 年 1 月 1 日到 2099 年 12 月 31 日之间的日期。
  • \n
\n\n

我能想到的就是这个:

\n\n
    \n
  • 提前选择最大可表示年份,例如 2100
  • \n
  • 将年-月-日转换为(2100 年)、(13 个月)、(32 天),如果这 3 个数字中的任何一个太小,请按照上面的说明添加前导零。
  • \n
  • 于是就Apr 21, 2014变成了86-09-11
  • \n
\n\n

86-09-11我的解决方案的主要问题是它对于代表 的人类来说并不明显April 21, 2014

\n\n

笔记:

\n\n
    \n
  • 我知道我可以按YYYY-MM-DD降序对字符串进行排序。那不是我要找的。
  • \n
  • 您的格式不必在字符串中分别表示年、月和日。例如,您可以将日期编码为整数,显示 \xe2\x80\x9c 距 2100 年 1 月 1 日还剩多少天\xe2\x80\x9d,左侧填充零。
  • \n
  • 即使您找不到易于人类阅读的格式,我仍然希望看到您的答案并尽可能多地了解解决我的问题的方法。
  • \n
  • 我不是在寻找有关月/日歧义的讨论。我想有些人可能会觉得2001-01-02模棱两可(1月2日或2月1日)。但这在这里并不重要:阅读格式的人会提前知道格式是什么(在本例中YYYY-MM-DD),因此不存在歧义。
  • \n
\n

Dav*_*tat 3

您可以使用 9 的补码 - 记下 ISO 日期,然后将每个数字替换为 9 减去该数字。至少我可以在脑海中应用编码/解码功能(它们是相同的)。然而,我不明白为什么你不保留一些冗余信息,将 2006-01-02 变成 HJJD-JI-JH-2006-01-02,派生 2006-01-02 -> 7993-98 -97 -> HJJD-JI-JH 替换 0 -> A、1 -> B、2 -> C、3 -> D、4 -> E、5 -> F、6 -> G、7 -> H , 8 -> I, 9 -> J。