1.传入一个时间范围,取出该时间范围内所有日期的集合
/**
* 传入一个时间范围,取出该时间范围内所有日期的集合
*
* @param startTime
* @param endTime
* @return
*/
public static List<String> getDateList(String startTime , String endTime){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
List<String> datelist = null;
try {
//设置开始时间
Calendar calBegin = Calendar.getInstance();
calBegin.setTime(format.parse(startTime));
//设置结束时间
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(format.parse(endTime));
//装返回的日期集合容器
datelist = new ArrayList<String>();
//将第一个月添加里面去
datelist.add(format.format(calBegin.getTime()));
// 每次循环给calBegin日期加一天,直到calBegin.getTime()时间等于dEnd
while (format.parse(endTime).after(calBegin.getTime())) {
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
datelist.add(format.format(calBegin.getTime()));
}
} catch (ParseException e) {
e.printStackTrace();
}
return datelist;
}
测试结果:
输入的参数为startTime【2022-03-13】,endTime【2022-03-17】
获取到的时间个数为【5】,集合内容为【["2022-03-13","2022-03-14","2022-03-15","2022-03-16","2022-03-17"]】
2.java保留两位小数但不进行四舍五入
/**
* 不四舍五入保留小数点后两位
*
* @param date
* @return
*/
public static String formatDecimal(double value) {
final DecimalFormat formatter = new DecimalFormat();
formatter.setMaximumFractionDigits(2);
formatter.setGroupingSize(0);
formatter.setRoundingMode(RoundingMode.FLOOR);
return formatter.format(value);
}
测试结果:
输入的str值为【45.6985】,输出的str值为【45.69】
3. java每个月最后几天日期获取
需求:
job使用cron表达式每个月定期几天处理数据时,会出现因为每个月天数不同,进而导致的最后几天无法依靠job进行数据处理,这个时候就需要单独对每个月的最后几天进行处理。
所以这里把需要获取当前月第一天和最后一天日期、获取前一个月最后一天以及最后一天对应的天数简单总结下。
@Test
public void testCalendar() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date nowDate = new Date();
String nowDateStr = df.format(nowDate);
//获取当前月第一天
Calendar ca = Calendar.getInstance();
ca.add(Calendar.MONTH, 0);
ca.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
String firstDay = df.format(ca.getTime());
System.out.println("获取当前月第一天firstDay=============="+ firstDay);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String lastDay = df.format(ca.getTime());
System.out.println("获取当前月最后一天lastDay=============="+ lastDay);
ca.set(Calendar.DAY_OF_MONTH, 0);
String beforeLastDay = df.format(ca.getTime());
logger.info("获取前月的最后一天beforeLastDay【" + beforeLastDay + "】");
//获取前月的最后一天是前月的第几天
int day = ca.get(Calendar.DAY_OF_MONTH);
logger.info("获取前月的最后一天是前月的第几天【" + day + "】");
}
测试结果:
获取当前月第一天firstDay==============2021-11-01
获取当前月最后一天lastDay==============2021-11-30
获取前月的最后一天beforeLastDay==============2021-10-31
获取前月的最后一天是前月的第几天==============31
4.获取当前日期的前一天
/**
* 在给定的日期加上或减去指定天数后的日期
* @param sourceDate 原始时间
* @param day 要调整的天数,向前为负数,向后为正数
* @return
*/
public static Date stepDay(Date sourceDate, int day) {
Calendar c = Calendar.getInstance();
c.setTime(sourceDate);
c.add(Calendar.DAY_OF_MONTH, day);
return c.getTime();
}
测试结果:
当前日期为【Thu Mar 17 18:54:37 CST 2022】,获取的日期为【Wed Mar 16 18:54:34 CST 2022】
对时间格式化输出:
当前日期为【2022-03-17】,获取的日期为【2022-03-16】