java对时间的操作轮子

 java 对时间转换、时间段的截取操作轮子

直接拿到项目中稍加修改就可以用

package com.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

public class DateUtil {
	public static ThreadLocal<DateFormat> chinaDateSDF = new ThreadLocal<DateFormat>() {

		@Override
		protected DateFormat initialValue() {
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
			return df;

		}
	};

	/**
	 * 获取日期yyyy-MM-dd格式字符串
	 *
	 * @param date
	 * @param locale
	 * @return
	 */
	public static String dateToStr(Date date, Locale locale) {
		if (locale == null) {

		}
		return chinaDateSDF.get().format(date);
	}

	/**
	 * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
	 *
	 * @param strDate
	 * @return
	 */
	public static Date strToDateLong(String strDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// ParsePosition pos = new ParsePosition(0);
		Date strtodate = null;
		try {
			strtodate = formatter.parse(strDate);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return strtodate;
	}

	/**
	 * 获取昨天日期
	 */
	public static String getyesterday() {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DATE, -1);
		String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
		return yesterday;
	}

	/**
	 * 获取本周开始时间
	 */
	public static String getWeekStartDate() {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
		Calendar cld = Calendar.getInstance(Locale.CHINA);
		cld.setFirstDayOfWeek(Calendar.MONDAY);// 以周一为首日
		cld.setTimeInMillis(System.currentTimeMillis());// 当前时间
		cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 周一
		String time = df.format(cld.getTime());
		return time;
	}

	/**
	 * 获取本周结束时间
	 */
	public static String getWeekEndDate() {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
		Calendar cld = Calendar.getInstance(Locale.CHINA);
		cld.setFirstDayOfWeek(Calendar.MONDAY);// 以周一为首日
		cld.setTimeInMillis(System.currentTimeMillis());// 当前时间
		cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 周日
		String time = df.format(cld.getTime());
		return time;
	}

	/**
	 * 获取上周开始时间
	 */
	public static String getLastWeekStartDate() {
		// 随便虚拟一个日期
		LocalDate now = LocalDate.now();
		// 求这个日期上一周的周一、周日
		LocalDate todayOfLastWeek = now.minusDays(7);
		LocalDate monday = todayOfLastWeek.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)).plusDays(1);
		ZoneId zone = ZoneId.systemDefault();
		Instant instant = monday.atStartOfDay().atZone(zone).toInstant();
		Date da = Date.from(instant);
		return new SimpleDateFormat("yyyy-MM-dd").format(da);
	}

	/**
	 * 获取上周结束时间
	 */
	public static String getLastWeekEndDate() {
		// 随便虚拟一个日期
		LocalDate now = LocalDate.now();
		// 求这个日期上一周的周一、周日
		LocalDate todayOfLastWeek = now.minusDays(7);
		LocalDate sunday = todayOfLastWeek.with(TemporalAdjusters.next(DayOfWeek.MONDAY)).minusDays(1);
		ZoneId zone = ZoneId.systemDefault();
		Instant instant = sunday.atStartOfDay().atZone(zone).toInstant();
		Date da = Date.from(instant);
		return new SimpleDateFormat("yyyy-MM-dd").format(da);
	}

	/**
	 * 获取本月第一天
	 */
	public static String getMonthFirstDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.add(Calendar.MONTH, 0);
		return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
	}

	/**
	 * 获取本月最后一天
	 */
	public static String getMonthLastDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
	}

	/**
	 * 获取前一个月第一天
	 */
	public static String getBeforeMonthFirstDay() {
		// 获取时间工具对象
		Calendar calendar = Calendar.getInstance();
		// 设置前一个月
		calendar.add(Calendar.MONTH, -1);
		// 设置开始时间是00:00:00
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		// 获取这个月最小的一天
		int minimum = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
		// 放进对象
		calendar.set(Calendar.DAY_OF_MONTH, minimum);
		Date time = calendar.getTime();
		// 指定格式输出
		return new SimpleDateFormat("yyyy-MM-dd").format(time);
	}

	/**
	 * 获取前一个月最后一天
	 */
	public static String getBeforeMonthLastDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.MONTH, -1);
		// 获取当前月最大的一天
		int maximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		calendar.set(Calendar.DAY_OF_MONTH, maximum);
		// 设置最一天的结束时间是23:59:59
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		calendar.set(Calendar.SECOND, 59);
		return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
	}

	/**
	 * @Description 根据当前日期获取本季度第一天
	 * @Return java.util.Date
	 **/
	public static String getCurrentQuarterStartTime() {
		Calendar c = Calendar.getInstance();
		int currentMonth = c.get(Calendar.MONTH) + 1;
		SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
		Date now = null;
		try {
			if (currentMonth <= 3)
				c.set(Calendar.MONTH, 0);
			else if (currentMonth <= 6)
				c.set(Calendar.MONTH, 3);
			else if (currentMonth <= 9)
				c.set(Calendar.MONTH, 6);
			else if (currentMonth <= 12)
				c.set(Calendar.MONTH, 9);
			c.set(Calendar.DATE, 1);
			now = longSdf.parse(shortSdf.format(c.getTime()));
			return new SimpleDateFormat("yyyy-MM-dd").format(now);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * @Description 根据当前日期获取本季度最后一天
	 * @Return java.util.Date
	 **/
	public static String getCurrentQuarterEndTime() {
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date;
		try {
			date = shortSdf.parse(getCurrentQuarterStartTime());
			cal.setTime(date);
			cal.add(Calendar.MONTH, 2);
			cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
			cal.set(Calendar.HOUR_OF_DAY, 23);
			cal.set(Calendar.MINUTE, 59);
			cal.set(Calendar.SECOND, 59);
			cal.set(Calendar.MILLISECOND, 999);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
	}

	/**
	 * 获取当前日期上一季度 开始时间
	 *
	 * @return
	 */
	public static String getStartQuarter() {
		Calendar startCalendar = Calendar.getInstance();
		startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
		startCalendar.set(Calendar.DAY_OF_MONTH, 1);
		setMinTime(startCalendar);
		return new SimpleDateFormat("yyyy-MM-dd").format(startCalendar.getTime());
	}

	/**
	 * 获取当前日期上一季度 结束时间
	 *
	 * @return
	 */
	public static String getLastQuarter() {
		Calendar endCalendar = Calendar.getInstance();
		endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
		endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		setMaxTime(endCalendar);

		return new SimpleDateFormat("yyyy-MM-dd").format(endCalendar.getTime());
	}

	/**
	 * 最小时间
	 *
	 * @param calendar
	 */
	private static void setMinTime(Calendar calendar) {
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
	}

	/**
	 * 最大时间
	 *
	 * @param calendar
	 */
	private static void setMaxTime(Calendar calendar) {
		calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
		calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
		calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
		calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
	}

	/**
	 * 获取本年的第一天
	 * 
	 * @return String
	 **/
	public static String getYearStart() {
		return new SimpleDateFormat("yyyy").format(new Date()) + "-01-01";
	}

	/**
	 * 获取本年的最后一天
	 * 
	 * @return String
	 **/
	public static String getYearEnd() {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.MONTH, calendar.getActualMaximum(Calendar.MONTH));
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		Date currYearLast = calendar.getTime();
		return new SimpleDateFormat("yyyy-MM-dd").format(currYearLast);
	}

	/**
	 * 去年 第一天
	 */
	public static String getYearBefore() {
		SimpleDateFormat formats = new SimpleDateFormat("yyyy");
		Calendar c = Calendar.getInstance();
		c.add(Calendar.YEAR, -1);
		Date date = c.getTime();
		return formats.format(date) + "-01-01";
	}

	/**
	 * 去年最后一天
	 */
	public static String getYearAfter() {
		SimpleDateFormat formats = new SimpleDateFormat("yyyy");
		Calendar c = Calendar.getInstance();
		c.add(Calendar.YEAR, -1);
		Date date = c.getTime();
		return formats.format(date) + "-12-31";
	}

	public static Map<String, String> checkSelectTime(String countValue) {
		String beginTime = "";
		String endTime = "";
		Map<String, String> map = new HashMap<String, String>();
		switch (countValue) {
		case "1":// 今日
			beginTime = new SimpleDateFormat("yyyy-MM").format(new Date());
			endTime = new SimpleDateFormat("yyyy-MM").format(new Date());
			break;
		case "2":// 昨日
			beginTime = DateUtil.getyesterday().toString();
			endTime = DateUtil.getyesterday().toString();
			break;
		case "3":// 本周
			beginTime = DateUtil.getWeekStartDate().toString();
			endTime = DateUtil.getWeekEndDate().toString();
			break;
		case "4":// 上周
			beginTime = DateUtil.getLastWeekStartDate().toString();
			endTime = DateUtil.getLastWeekEndDate().toString();
			break;
		case "5":// 本月
			beginTime = DateUtil.getMonthFirstDay().toString();
			endTime = DateUtil.getMonthLastDay().toString();
			break;
		case "6":// 上月
			beginTime = DateUtil.getBeforeMonthFirstDay().toString();
			endTime = DateUtil.getBeforeMonthLastDay().toString();
			break;
		case "7":// 本季度
			beginTime = DateUtil.getCurrentQuarterStartTime().toString();
			endTime = DateUtil.getCurrentQuarterEndTime().toString();
			break;
		case "8":// 上季度
			beginTime = DateUtil.getStartQuarter().toString();
			endTime = DateUtil.getLastQuarter().toString();
			break;
		case "9":// 本年
			beginTime = DateUtil.getYearStart().toString();
			endTime = DateUtil.getYearEnd().toString();
			break;
		case "10":// 去年
			beginTime = DateUtil.getYearBefore().toString();
			endTime = DateUtil.getYearAfter().toString();
			break;
		default:
			beginTime = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();
			endTime = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();
			break;
		}
		map.put("beginTime", beginTime);
		map.put("endTime", endTime);
		return map;
	}
	/**
	 * 计算两个日期间所有月份 传值Date
	 * */
	public static List<String> getBetweenMonths(Date start, Date end) {
        List<String> result = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
 
        Calendar tempStart = Calendar.getInstance();
        tempStart.setTime(start);
        // 加了一个月
        tempStart.add(Calendar.MONTH, 1);
        Calendar tempEnd = Calendar.getInstance();
        tempEnd.setTime(end);
        result.add(sdf.format(start));
        while (tempStart.before(tempEnd)) {
            result.add(sdf.format(tempStart.getTime()));
            tempStart.add(Calendar.MONTH, 1);
        }
        return result;
    }
	/**
	 * 计算两个日期间所有月份  传值字符串
	 * */
	 public static List<String> getMonthBetweenDate(String startTime, String endTime){
	        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
	        // 声明保存日期集合
	        List<String> list = new ArrayList<String>();
	        try {
	            // 转化成日期类型
	            Date startDate = sdf.parse(startTime);
	            Date endDate = sdf.parse(endTime);
	 
	            //用Calendar 进行日期比较判断
	            Calendar calendar = Calendar.getInstance();
	            while (startDate.getTime()<=endDate.getTime()){
	                // 把日期添加到集合
	                list.add(sdf.format(startDate));
	                // 设置日期
	                calendar.setTime(startDate);
	                //把日期增加一天
	                calendar.add(Calendar.MONTH, 1);
	                // 获取增加后的日期
	                startDate=calendar.getTime();
	            }
	        } catch (ParseException e) {
	            e.printStackTrace();
	        }
	        return list;
	    }

	
	public static void main(String[] args) {
		System.out.println(getMonthBetweenDate("2021-02-02","2022-04-06"));
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值