我想生成一个随机的时间戳,并添加一个随机的增量它来生成第二时间戳。 那可能吗?
如果我通过随机的长值来创建一个时间戳,我想随机生成,长期价值,这将是产生这个值给一个时间戳2012例如限制?
我想生成一个随机的时间戳,并添加一个随机的增量它来生成第二时间戳。 那可能吗?
如果我通过随机的长值来创建一个时间戳,我想随机生成,长期价值,这将是产生这个值给一个时间戳2012例如限制?
您需要缩放的随机数是在一个特定年份的范围内,并添加一年的开始,因为偏移。 毫秒中从一年一年的变化到另一个(闰年有一个额外的一天,某年有飞跃分钟,等)的数量,因此可以判断缩放如下之前的范围:
long offset = Timestamp.valueOf("2012-01-01 00:00:00").getTime();
long end = Timestamp.valueOf("2013-01-01 00:00:00").getTime();
long diff = end - offset + 1;
Timestamp rand = new Timestamp(offset + (long)(Math.random() * diff));
对于你的榜样长期价值传递到日期应使用是1325397600和1293861599之间的年2012.Try 这个网站查询! 要生成,你可以做这样的事情随机日期:
Random r =new Random();
long unixtime=(long) (1293861599+r.nextDouble()*60*60*24*365);
Date d = new Date(unixtime);
使用ApacheCommonUtils产生长给定范围内的随机,然后创建日期的是长期的。
例:
import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;
public Date nextDate(Date min, Date max) {
RandomData randomData = new RandomDataImpl();
return new Date(randomData.nextLong(min.getTime(), max.getTime()));
}
可以通过产生一个随机产生的随机时间标记long
在适当范围内,然后把它当作一毫秒精度时间戳; 例如, new Date(long)
。
为了确定范围,创建表示范围的开始日期和结束日期的日期或日历(或类似)对象,并调用long getTime()
或等于拿到毫秒时间值。 然后生成一个随机long
在这个范围内。
IMO在Java中的最佳日期时间库JodaTime。
如果你想在2012年的随机TimeStam例如,你应该创建01/01/2012日期开始,然后添加一个随机的时间数。 最终创建一个长构造一个Timestamp对象:
org.joda.time.DateTime tempDateTime = org.joda.time.DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2012-01-01").plusMillis(my_random_value);
return new Timestamp(tempDateTime .getMillis())
通过找出2012年开始启动:
long start2012 = new SimpleDateFormat("yyyy").parse("2012").getTime();
获得本年度的随机毫秒:
final long millisInYear2012 = 1000 * 60 * 60 * 24 * 365 + 1000; // Have to account for the leap second!
long millis = Math.round(millisInYear2012 * Math.random());
Timestamp timeStamp = new Timestamp(start2012 + millis);
下面的代码2012年生成随机时间戳。
DateFormat dateFormat = new SimpleDateFormat("yyyy");
Date dateFrom = dateFormat.parse("2012");
long timestampFrom = dateFrom.getTime();
Date dateTo = dateFormat.parse("2013");
long timestampTo = dateTo.getTime();
Random random = new Random();
long timeRange = timestampTo - timestampFrom;
long randomTimestamp = timestampFrom + (long) (random.nextDouble() * timeRange);
看看这个方法:
public static Timestamp dateRandom(int initialYear, int lastYear) {
if (initialYear > lastYear) {
int year = lastYear;
lastYear = initialYear;
initialYear = year;
}
Calendar cInitialYear = Calendar.getInstance();
cInitialYear.set(Calendar.YEAR, 2015);
long offset = cInitialYear.getTimeInMillis();
Calendar cLastYear = Calendar.getInstance();
cLastYear.set(Calendar.YEAR, 2016);
long end = cLastYear.getTimeInMillis();
long diff = end - offset + 1;
return new Timestamp(offset + (long) (Math.random() * diff));
}
其他方式
public static Timestamp getRandomTime(){
Random r = new Random();
int Low = 100;
int High = 1500;
int Result = r.nextInt(High-Low) + Low;
int ResultSec = r.nextInt(High-Low) + Low;
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, - Result);
calendar.add(Calendar.SECOND, - ResultSec);
java.sql.Timestamp ts = new java.sql.Timestamp(calendar.getTimeInMillis());
return ts;
}
import org.joda.time.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
DateTime d1 =DateTime.now().withZone(DateTimeZone.UTC);
DateTime d0 = d1.minusSeconds(20);
DateTime d2 = d1.plusSeconds(20);
Random r = new Random();
long t1 = d0.getMillis();
long t2 = d2.getMillis();
//DateTime d1 = new DateTime(t1);
//DateTime d2 = new DateTime(t2);
Random random = new Random();
long rand = t1 + (long) (random.nextDouble() * (t2-t1));
DateTime randDatetime = new DateTime(rand);
String datestr= randDatetime.toString("MM/dd/YYYY hh:mm:ss") ;
System.out.println(datestr) ;