来自Date的唯一int

时间:2011-01-12 16:32:36

标签: java date calendar

这是一般编程,但我在Java工作。

鉴于日期dd-mm-yydd-mm-yyyy(例如13-01-2011),我想将其转换为唯一的数字,以便任何两个日期都有不同的数字。这一年并不重要。因此,将dd-mm转换为一个唯一的int是可以接受的。有谁知道这样做的算法?

我是SOrry:我想更具体一点:

唯一的数字应该是1到365(或0到364),或者应该以模数365分解。(我现在忽略了闰年的情况)。

如此连接" ddmm"可能是唯一的4位数字。但模数365可能不是唯一的。

6 个答案:

答案 0 :(得分:3)

所以你基本上想要获得一年中的这一天?这与“从日期开始的独特int”不同。

使用Calendar#get(Calendar.DAY_OF_YEAR)(从1开始)。

Date date = getItSomehow();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);

正如您已经承认的那样,在闰/非闰年上进行比较将失败。

答案 1 :(得分:1)

使用自年初以来的天数。

答案 2 :(得分:0)

new Date().getTime()

自1970年以来的毫秒数应该是每个日期唯一的。只需将字符串转换为日期对象,然后使用getTime()

  DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
  Date date = formatter.format( myInput );

答案 3 :(得分:0)

使用unix时间戳请参阅java.util.Date.getTime()

答案 4 :(得分:0)

更新:OP澄清了想要1-364范围内的唯一值的问题。在这种情况下,我会将日期转换为Calendar对象并在其上调用get (Calendar.DAY_OF_YEAR) - 这将返回一年中的一天的数字,这正是OP看起来之后的情况。 / p>

原始答案: 有很多方法可以做到这一点,因为有一些字符串。如果您希望能够使用唯一数字进行日期的相对比较,那么最明显的解决方案是执行大多数计算机所做的操作,即将日期转换为某个最低公分母,例如特定时期的秒数。 Java提供了使用DateCalendar类执行此操作的方法。如果您只关心日期和月份,那么您可以通过int v = (month * 120) + day之类的方式实现相同目标。如果您不关心比较并且只想要一个唯一值,那么您可以使用某种散列算法来提取日期摘要。例如,在Java中,您可以使用String表示日期并在其上调用hashCode()

答案 5 :(得分:0)

如果你只需要一个唯一的密钥,Calendar的hashCode()应该可以解决这个问题 或者,您可以连接两位数的月份和日期以及四位数年份。