Java处理时间常用方法

Java处理时间相关工作总结


最近工作中使用到了一些关于处理统计时间的相关方法,在这里各位小伙伴分享一下

/**
	 * 获取时间节点内天数日期或月份日期集合
	 *
	 * @param time 起始具体日期 格式:yyyy-MM-dd得到的为某几天的日期集合   yyyy-MM得到的为某几个月的日期集合
	 * @param selectNumberDays 需要向前查询的天数或月数
	 * @return 时间节点内天数日期或月份日期集合
	 */
	public List<String> pastDayOrMouths(String time,Integer selectNumberDays){
		List<String> pastDaysList = new ArrayList<>();
		try {
			String formatType = "yyyy-MM-dd";
			if(time.length() == 7){
				formatType = "yyyy-MM";
			}
			SimpleDateFormat sdf = new SimpleDateFormat(formatType);
			Date date = sdf.parse(time);
			for (int i = selectNumberDays - 1; i >= 0; i--) {

				Calendar calendar = Calendar.getInstance();
				calendar.setTime(date);
				if(time.length() == 7){
					calendar.add(Calendar.MONTH, - i);
				}else{
					calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - i);
				}
				Date todayOrMouth = calendar.getTime();
				String result = sdf.format(todayOrMouth);

				String oneDayOrOneMouth = "";
				if(time.length() == 7){
					oneDayOrOneMouth = getSomeMouthStarDayAndEndDay(result);
				}else{
					oneDayOrOneMouth = result + " 00:00:00" + "&&" + result + " 23:59:59";
				}
				pastDaysList.add(oneDayOrOneMouth);

			}
		} catch (ParseException e) {
			e.printStackTrace();
			throw new ServiceException("获取时间范围内日期集合失败!");
		}
		return pastDaysList;
	}
	
	/**
	 *
	 * 获取当前月指定个数的前几个月日期
	 * @param monthDate 指定月份 格式:yyyy-MM
	 * @param offset 指定前几个月,例如前一个月 offset==1,前两个月offset==2
	 * @return
	 */
	public static String getMonths(String monthDate,int offset) {
		String format = "";
		try{
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
			Date date = sdf.parse(monthDate);

			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.add(Calendar.MONTH, -offset);
			Date m = calendar.getTime();
			format = sdf.format(m);
		}catch (Exception e){
			e.printStackTrace();
		}
		return format;
	}


/**
	 * 获取时间范围某几个月日期集合
	 *
	 * @param minDate 起始月份 格式:yyyy-MM
	 * @param maxDate 截至月份 格式:yyyy-MM
	 */
	private List<String> getMonthBetween(String minDate, String maxDate){
		List<String> result = new ArrayList<>();
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月

			Calendar min = Calendar.getInstance();
			Calendar max = Calendar.getInstance();
			min.setTime(sdf.parse(minDate));
			min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

			max.setTime(sdf.parse(maxDate));
			max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

			Calendar curr = min;
			while (curr.before(max)) {
				String mouth = sdf.format(curr.getTime());
				// 转换格式
				String someMouthStarDayAndEndDay = getSomeMouthStarDayAndEndDay(mouth);
				result.add(someMouthStarDayAndEndDay);
				curr.add(Calendar.MONTH, 1);
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}

		return result;
	}
	
	/**
	 * 获取某年某个月的第一天和最后一天
	 * @param monuth 格式 yyyy-MM
	 */
	public String getSomeMouthStarDayAndEndDay(String monuth){
		String ret = "";
		try {
			// 格式化传入时间
			Date parse = new SimpleDateFormat("yyyy-MM").parse(monuth);
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

			Calendar calendar = Calendar.getInstance();
			// 设置时间
			calendar.setTime(parse);

			calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
			String firstDate = sdf.format(calendar.getTime());
			ret = firstDate + " 00:00:00" + "&&";

			calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
			String lastDate = sdf.format(calendar.getTime());
			ret += lastDate + " 23:59:59";

		} catch (Exception e) {
			e.printStackTrace();
		}
		return ret;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值