Java Dao操作中的时间戳毫秒区分
我有一个非常简单的dao操作,它工作得非常好(JUnit测试的一部分):Java Dao操作中的时间戳毫秒区分,java,mysql,timestamp,Java,Mysql,Timestamp,我有一个非常简单的dao操作,它工作得非常好(JUnit测试的一部分): for(int i=0;i
for(int i=0;i<5000;i++)
saveUser(lUser,newdate().getTime());
第二个参数是作为long值的时间戳。我测试了一种批量保存
我的问题是:从理论上讲,我的数据库(mysql)中有两个具有相同长值的条目吗在同样的过程中
在关系中的第一眼看到每个entrie的不同长值(至少最后一毫秒增加)
提前Thx
Stefan是的,这是可能的,特别是如果您有一个快速硬件,并且两个保存操作同时完成。然后,两个创建的条目将具有相同的长值。是的,这是可能的,特别是如果您有一个快速硬件,并且两个保存操作同时完成。然后,两个创建的条目将具有相同的长值。是的,这是可能的,特别是如果您有一个快速硬件,并且两个保存操作同时完成。然后,两个创建的条目将具有相同的长值。是的,这是可能的,特别是如果您有一个快速硬件,并且两个保存操作同时完成。然后,两个创建的条目将具有相同的长值。您不能保证
new Date()
会准确地给出当前时间。通常情况下,它可能会在10毫秒左右出错。调用newdate()
使用System.currentTimeMillis()
。currentTimeMillis()的Javadoc表示
以毫秒为单位返回当前时间。请注意,虽然返回值的时间单位为毫秒,但值的粒度取决于底层操作系统,可能更大。例如,许多操作系统以几十毫秒为单位测量时间
所以它依赖于操作系统。根据我的经验,Windows在提供准确日期方面尤其糟糕
当然,您不能保证连续调用new Date()
会得到不同的日期。您不能保证new Date()
会准确地给出当前时间。通常情况下,它可能会在10毫秒左右出错。调用newdate()
使用System.currentTimeMillis()
。currentTimeMillis()的Javadoc表示
以毫秒为单位返回当前时间。请注意,虽然返回值的时间单位为毫秒,但值的粒度取决于底层操作系统,可能更大。例如,许多操作系统以几十毫秒为单位测量时间
所以它依赖于操作系统。根据我的经验,Windows在提供准确日期方面尤其糟糕
当然,您不能保证连续调用new Date()
会得到不同的日期。您不能保证new Date()
会准确地给出当前时间。通常情况下,它可能会在10毫秒左右出错。调用newdate()
使用System.currentTimeMillis()
。currentTimeMillis()的Javadoc表示
以毫秒为单位返回当前时间。请注意,虽然返回值的时间单位为毫秒,但值的粒度取决于底层操作系统,可能更大。例如,许多操作系统以几十毫秒为单位测量时间
所以它依赖于操作系统。根据我的经验,Windows在提供准确日期方面尤其糟糕
当然,您不能保证连续调用new Date()
会得到不同的日期。您不能保证new Date()
会准确地给出当前时间。通常情况下,它可能会在10毫秒左右出错。调用newdate()
使用System.currentTimeMillis()
。currentTimeMillis()的Javadoc表示
以毫秒为单位返回当前时间。请注意,虽然返回值的时间单位为毫秒,但值的粒度取决于底层操作系统,可能更大。例如,许多操作系统以几十毫秒为单位测量时间
所以它依赖于操作系统。根据我的经验,Windows在提供准确日期方面尤其糟糕
当然,您也不能保证连续调用new Date()
会得到不同的日期。我认为,自UNIX时代以来,毫秒仍然是以合理准确的方式测量时间的最佳方式。然而,将时间戳仅仅作为主键并不太好。只要你有一个唯一的主键,你就不需要唯一的时间戳
如果出于某种原因,您仍然希望时间戳是唯一的,您可以应用“人工涂抹”。例如:
long last = 0;
for (int i = 0 ; i < 5000 ; i++) {
long now = new Date().getTime();
if (now <= last) {
now = last + 1;
}
last = now;
mUserDao.saveUser(lUser, now);
}
long last=0;
对于(int i=0;i<5000;i++){
long now=new Date().getTime();
如果(现在我认为从UNIX纪元开始的毫秒仍然是以合理准确的方式测量时间的最佳方式。但是,将时间戳仅作为主键并不太好。只要您有唯一的主键,就不需要唯一的时间戳
如果出于某种原因,您仍然希望时间戳是唯一的,您可以应用“人工涂抹”。例如:
long last = 0;
for (int i = 0 ; i < 5000 ; i++) {
long now = new Date().getTime();
if (now <= last) {
now = last + 1;
}
last = now;
mUserDao.saveUser(lUser, now);
}
long last=0;
对于(int i=0;i<5000;i++){
long now=new Date().getTime();
如果(现在我认为从UNIX纪元开始的毫秒仍然是以合理准确的方式测量时间的最佳方式。但是,将时间戳仅作为主键并不太好。只要您有唯一的主键,就不需要唯一的时间戳
如果出于某种原因,您仍然希望时间戳是唯一的,您可以应用“人工涂抹”