我必须在一个通用的唯一的Integer 值中转换一个时间戳字符串,如:20140912125314001 (yyyymmddhhMMssSSS)
,我可以像PK一样使用它(我的数据库中的PK字段是Number(9))。
我该怎么办?
答案 0 :(得分:0)
由于你还没有得到完整的答案,我总结了这里作为评论所写的内容。
您的问题可以分为3个子问题
20140912125314001
格式化日期yyyymmddhhMMssSSS
。int
类型int
用作数据库中的主键。 第一个问题的答案是:使用SimpleDateFormat
。您将获得Date
,然后调用getTime()
以获得毫秒。
第二个问题的答案已经完成:在不丢失数据的情况下,您无法将long
放入int
。
但是我可以建议你一个解决方法:自1970年1月1日以来你可能不需要几毫秒。我想从应用程序安装开始就足够了几毫秒。例如,您可以在安装应用程序时获取时间戳,然后从当前时间戳中减去此数字,这样您就可以得到合理的数字,希望不会超过Integer.MAX_VALUE
。
第三部分是使用时间戳作为关系数据库中的主键。对不起,这是完全错误的。电脑工作得很快。毫秒不是太多。计算机可以在一毫秒内执行数千次操作。这实际上意味着您永远不应该将时间戳用作主键或甚至具有唯一约束的字段。如果您想将主键与时间相关联,可以使用UUID
代替。但是(正如已经提到的)关系数据库为您提供了更好的工具:自动递增序列。将它用作主键,如果您希望存储时间戳(以秒,毫秒或任何其他格式)作为可用于查询的附加字段。