将日历日期编码为YYYY-MM-DD
格式的字符串(带或不带分隔符,例如2014-04-21
,2014.04.21
或20140421
)具有以下属性:
2014-04-21
显然代表April 21, 2014
)请注意,要使其正常工作,日期(年,月和日)的每个组成部分必须始终使用相同数量的字符,如果数字太小,则前导零。这意味着YYYY
只能代表9999
年。如果我们想要代表5位数的年份,那么上面示例中的日期将变为02014-04-21
。
有没有办法将日历日期编码为字符串,这样按字典顺序对字符串进行排序会使它们按时间倒序排列?
理想情况下,人类很容易在日历日期和您建议的格式之间进行转换,但即使您不管理(我的解决方案不是这样),我仍然想知道您的解决方案。< / p>
如果有帮助,您可能需要此限制:
Apr 21, 2014
变为86-09-11
我的解决方案的主要问题是86-09-11
代表April 21, 2014
的人并不明显。
YYYY-MM-DD
个字符串。那不是我想要的。2001-01-02
含糊不清(1月2日或2月1日)。但这并不重要:阅读格式的人会提前知道格式是什么(在这种情况下是YYYY-MM-DD
)所以没有歧义。答案 0 :(得分:2)
您可以使用9的补码 - 记下ISO日期,然后将每个数字替换为9减去该数字。至少我可以在头脑中应用编码/解码功能(它们是相同的)。但是,我不明白为什么你不仅仅保留一些冗余信息,将2006-01-02变成HJJD-JI-JH-2006-01-02,派生2006-01-02 - &gt; 7993-98-97 - &gt; HJJD-JI-JH通过替换0 - &gt; A,1 - &gt; B,2 - &gt; C,3 - &gt; D,4 - &gt; E,5 - &gt; F,6 - &gt; G,7 - &gt; H,8 - &gt;我,9 - &gt;学家
答案 1 :(得分:0)
如果有日期,也可以使用日期的Long值。从Long.MAX_VALUE中减去该数字,右填充为0,您将得到一个19位数字,当按字典顺序升序排序时,该数字将从最新到最旧排序。