java学习中的时间方法总结

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值