java日期作为“日期键”的Int
我想知道如何在Java中创建一个表达式,该表达式接受格式为“1999-12-30 12:34:45”的日期变量,并将其转换为包含“19991230”的Int
这可能是其他人会喜欢的,尤其是那些提取和清理数据以加载到数据仓库中的人
我的猜测是需要更改日期模式、转换为字符串、截断第一部分(8个字符)并转换为int
想法
(更新) 我不善于解释这个问题。 结果int将作为日期维度的键/Fk id。应该执行类似的操作来创建时间维度的键。int将减少facts表中消耗的大小,这些int键将存储在facts表中。见相关答案:https://stackoverflow.com/a/8416548/1132571
# 1 楼答案
您可以使用以下内容:
然后,您需要做的就是获取date对象的值,如下所示:
这将给你自1970年以来的毫秒,这是一个被大多数计算机系统使用的通用时间系统
要转换回使用,请执行以下操作:
# 2 楼答案
假设格式保持不变:
印刷品:19991230
# 3 楼答案
getTime将为您提供很长的时间来处理此信息,int将不够大
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#getTime()
# 4 楼答案
只需删除特殊字符,然后转换为int
Integer.parseInt("1999-12-30 12:34:45".replaceAll("[- :]", ""));
在您的情况下,您只需要日期,而不是时间,因此:
Integer.parseInt("1999-12-30 12:34:45".substring(0,10).replaceAll("-", ""));
我应该提到,只有在原始格式正确的情况下,这才有效。。。事实上,它很难看,我宁愿用很长的一段时间——也许是简单的格式。你真的不想扔掉有用的数据
# 5 楼答案
使用SimpleDateFormat类很容易做到这一点。但是,正如其他人提到的,您可能应该将历元时间戳存储为数据库时间戳列,而不是以int形式存储日期。当您稍后使用SQL操作数据时,它将导致问题
# 6 楼答案
虽然我同意评论者的看法,但这很奇怪,如果我真的需要将日期转换为long,我会使用
date.getTime()
,它返回一个long,表示1970年1月1日以来的毫秒数好东西是它可以很容易地转换回日期(Java有一个用于此的构造函数,我怀疑其他语言也有)