1

我有一套LongsTimestamps实际上)。显然,它们不能在Integers不丢失数据的情况下被强制转换,因为timestamp不适合Integer范围。我需要Integer根据这些生成类型的主键Longs。有没有办法做到这一点?

4

3 回答 3

2

由于Longs 多于Integers,因此没有安全的方法可以对所有Longs 集都有效。
但是,如果Longs 相距不太远,您可以将第一个时间戳用作 0,然后只需使用差异来Integer为每个后续时间戳获取唯一值。

于 2013-01-04T08:31:36.210 回答
1

方法有很多,但是你真的认为基于时间戳的主键是个好主意吗?拥有多个具有相同时间戳的条目并不难,因此它不会是一个非常好的密钥。

无论如何,由于您使用的是 java,我猜您的时间戳以毫秒为单位。由于将其截断为秒是完全坏主意(在同一秒内很容易与其他条目发生冲突)可能好主意是“转移”时间戳:从时间戳中选择最小日期并使时间戳为零,其他相对于它:在这种情况下,您可能会适合整数。

于 2013-01-04T08:32:41.130 回答
1

假设创建日期时间戳的范围是有限的。假设日期在 2004 年 12 月 12 日之后。似乎是截断最高有效数字的合理方法,例如

long 00001357288262
int      1357288262
于 2013-01-04T08:33:22.813 回答