随机生成时间范围内的时间戳
public static Date randomDate(String beginDate, String endDate) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start = format.parse(beginDate);// 构造开始日期
Date end = format.parse(endDate);// 构造结束日期
// getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
if (start.getTime() >= end.getTime()) {
return null;
}
long date = random(start.getTime(), end.getTime());
return new Date(date);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 随机生成时间段之内的int(11)时间戳(开始时间和结束时间的随机数)
*/
public static long random(long begin, long end) {
long rtn = begin + (long) (Math.random() * (end - begin));
// 如果返回的是开始时间和结束时间,则递归调用本函数查找随机值
if (rtn == begin || rtn == end) {
return random(begin, end);
}
return rtn;
}
// 调用
Date randomDate = randomDate("2020-06-14 17:6:0", "2020-06-15 17:6:0");
Integer dateValue = Integer.valueOf(String.valueOf(randomDate.getTime()).substring(0, 10));
批量分组,写入数据库
/**
* list集合中有几十万条数据,每10000条为一组取出
*/
public static Map groupList(List list) {
int listSize = list.size();
int toIndex = 10000;
Map map = new HashMap(); //用map存起来新的分组后数据
int keyToken = 1;
for (int i = 0; i < list.size(); i += 10000) {
if (i + 10000 > listSize) { //作用为toIndex最后没有100条数据则剩余几条newList中就装几条
toIndex = listSize - i;
}
List newList = list.subList(i, i + toIndex);
map.put("第" + keyToken + "批次", newList);
keyToken++;
}
return map;
}
// 调用
// dmpPhoneList存储的是一天的总条数
List<dmp_phone> dmpPhoneList = phoneRepository.getbatch(Integer.parseInt(String.valueOf(end)));
System.out.println("24天前的时间戳::" + Integer.parseInt(String.valueOf(end)) + ",一批的数据量:::" + dmpPhoneList.size());
//得到每个批次
Map<String, List<dmp_phone>> map = groupList(dmpPhoneList);
Iterator<Map.Entry<String, List<dmp_phone>>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, List<dmp_phone>> entry = entries.next();
// System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
for (dmp_phone phone : entry.getValue()) {
// 获取当前时间(int类型的时间戳)
long dateTime = new Date().getTime() / 1000L;
Integer dateValue = Integer.valueOf(String.valueOf(dateTime).substring(0, 10));
if (end > phone.getCreateTime()) {
phone.setUpdateTime(dateValue);
dmp_phone update = phoneRepository.update(phone);
dmp_phone_his his = new dmp_phone_his();
his.setPhone(phone.getPhone());
his.setProvince(phone.getProvince());
his.setCity(phone.getCity());
his.setLabel_id(phone.getLabel_id());
his.setCreateTime(phone.getCreateTime());
his.setLock(phone.getLock());
his.setUpdateTime(phone.getUpdateTime());
// 存放超过5天的数据
his_tmp.add(his);
deletelist.add(phone);
}
}
}
拿到前N天的时间戳
Calendar now = Calendar.getInstance();
now.add(Calendar.DAY_OF_MONTH, -5);
String endtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now.getTime());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dateStart = format.parse(endtime);
long end = dateStart.getTime() / 1000L;
System.out.println(end);