最近在做一个需求就是获取钉钉打卡数据,在做这个需求时涉及到了大量的对时间的操作,这里就对使用过的方法做一个记录,本人也是一个刚毕业投入工作的代码萌新。对于很多的代码不够理解,只能够使用,现在先记载下来,后面在加以研究。
先是获取几个常用时间的方法
// 计算一周前0点的时间戳
public long oneWeekAgo() {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) - 7,
00, 00, 00);
return calendar.getTime().getTime();
}
// 计算昨天0点的时间戳
public long yestodayTimestamp() {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) - 1,
00, 00, 00);
return calendar.getTime().getTime();
}
// 计算今天0点的时间戳
public long startTimestamp() {
Long time = System.currentTimeMillis(); // 当前时间的时间戳
// System.out.println(zero);
return time / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
}
// 计算明天天23点59分59秒的时间戳
public long endTimestamp() {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) + 1,
23, 59, 59);
return calendar.getTime().getTime();
}
将一段时间以周,天分割
/**
*
* @param dBegin
* @param dEnd
* @return List<Long> 计算一个时间段内的每一天的时间毫秒数
*/
public static List<Long> findDates(Date dBegin, Date dEnd) {
List<Long> timelist = new ArrayList<>();
Long time = 0L;
Calendar calBegin = Calendar.getInstance();
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(dEnd);
while (dEnd.after(calBegin.getTime())) {
time = calBegin.getTimeInMillis();
timelist.add(time);
calBegin.add(Calendar.DAY_OF_MONTH, 1);
}
time = calEnd.getTimeInMillis();
timelist.add(time);
return timelist;
}
/**
* 将时间按照星期分割
public static List<String> doDateType(String startDate, String endDate) throws ParseException {
List<String> listWeekOrMonth = new ArrayList<String>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date sDate = dateFormat.parse(startDate);
Calendar sCalendar = Calendar.getInstance();
sCalendar.setFirstDayOfWeek(Calendar.MONDAY);
sCalendar.setTime(sDate);
Date eDate = dateFormat.parse(endDate);
Calendar eCalendar = Calendar.getInstance();
eCalendar.setFirstDayOfWeek(Calendar.MONDAY);
eCalendar.setTime(eDate);
boolean bool = true;
while (sCalendar.getTime().getTime() < eCalendar.getTime().getTime()) {
if (bool || sCalendar.get(Calendar.DAY_OF_WEEK) == 2 || sCalendar.get(Calendar.DAY_OF_WEEK) == 1) {
listWeekOrMonth.add(dateFormat.format(sCalendar.getTime()));
bool = false;
}
sCalendar.add(Calendar.DAY_OF_MONTH, 1);// 加一天
}
listWeekOrMonth.add(dateFormat.format(eCalendar.getTime()));
if (listWeekOrMonth.size() % 2 != 0) {
listWeekOrMonth.add(dateFormat.format(eCalendar.getTime()));
}
return listWeekOrMonth;
}
//上面的对方法doDateType的调用会获取每一个时间节点,可以通过这种方式循环获取一对时间
for (int g = 0; g < weekList.size(); g += 2) { // 根据时间分割循环获取
startTime = weekList.get(g);
endTime = weekList.get(g + 1);
}
将毫秒数转化为时间
Long sd=1345185923140L;
Date date = new Date(); // 实例化对象
date.setTime(sd);
String workDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println(workDate);
将String类型的时间转化为Calendar格式
String startDate = "2020-07-21 00:00:00";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date sDate = dateFormat.parse(startDate);
Calendar sCalendar = Calendar.getInstance(); //实例化对象
sCalendar.setFirstDayOfWeek(Calendar.MONDAY); //设置一周以那一天为第一天,这里为以周一为1
//默认为以周日为1
sCalendar.setTime(sDate);
后续在继续补充