java处理年月日周时间



import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class DateUtils {
	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

	public static String dateToString(String format, Date date) {
		sdf = new SimpleDateFormat(format);
		return sdf.format(date);

	}

	public static Date StringToDate(String format, String date) {
		sdf = new SimpleDateFormat(format);
		try {
			return sdf.parse(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 获取今天
	 * 
	 * @return String
	 */
	public static String getToday() {
		return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
	}

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

	public static String getYear() {
		return Calendar.getInstance().get(Calendar.YEAR) + "";
	}

	/**
	 * 获取本月开始日期
	 * 
	 * @return String
	 **/
	public static String getMonthStart() {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		Date time = cal.getTime();
		return new SimpleDateFormat("yyyy-MM-dd").format(time);
	}

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

	/**
	 * 获取本周的第一天
	 * 
	 * @return String
	 **/
	public static String getWeekStart() {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.WEEK_OF_MONTH, 0);
		cal.set(Calendar.DAY_OF_WEEK, 1);
		Date time = cal.getTime();
		String format = new SimpleDateFormat("yyyy-MM-dd").format(time);
		int year = (new Date().getYear() + 1900);
		if (format.indexOf(year + "") == -1) {
			format = getYearStart();
		}
		return format;
	}

	/**
	 * 获取本周的最后一天
	 * 
	 * @return String
	 **/
	public static String getWeekEnd() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_WEEK, cal.getActualMaximum(Calendar.DAY_OF_WEEK));
		cal.add(Calendar.DAY_OF_WEEK, 0);
		Date time = cal.getTime();
		String format = new SimpleDateFormat("yyyy-MM-dd").format(time);
		int year = (new Date().getYear() + 1900);
		if (format.indexOf(year + "") == -1) {
			format = getYearEnd();
		}
		return format;
	}

	/**
	 * 获取本年的第一天
	 * 
	 * @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);
	}

	/**
	 * .Description://根据字符日期返回星期几
	 * 
	 * 
	 */
	public static String getWeek(String dateTime) {
		String week = "";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date = sdf.parse(dateTime);
			SimpleDateFormat dateFm = new SimpleDateFormat("EEEE");
			week = dateFm.format(date);
			week = week.replaceAll("星期", "周");
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return week;
	}

	/**
	 * 获取本周是本年第几周
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static String getWeekNum() throws Exception {
		List<String> aa = findWeekByStartAndEnd(getYearStart(), getYearEnd());
		for (String date : aa) {
			String weekNum = date.split("周")[0];
			String startDateStr = date.split("周")[1].split("结束")[0];
			String endDateStr = date.split("周")[1].split("结束")[1];
			Date startDate = sdf.parse(startDateStr);
			Date endDate = sdf.parse(endDateStr);

			Date now = sdf.parse(sdf.format(new Date()));
			if ((now.before(endDate) && now.after(startDate)) || now.equals(startDate) || now.equals(endDate)) {
				return weekNum.split("第")[1];
			}
		}
		return null;

	}

	// 查询指定时间的周的开始时间和结束时间
	public static List<String> findWeekByStartAndEnd(String startDate, String endDate) throws Exception {
		List<String> startEnd = new ArrayList<>();// 存放周的开始时间和结束时间
		List<String> allTime = allTime(startDate, endDate);
		List<List<String>> list2 = new ArrayList<>();// 存放一年每周

		ArrayList<String> xinqis = new ArrayList<>();// 存放一周
		int j = 0;
		for (int i = 0; i < allTime.size(); i++) {

			String date = allTime.get(i);// 2021-11
			String week = getWeek(date);// 星期

			if (week.equals("周六") || i == allTime.size() - 1) {
				j++;
				xinqis.add(date);
				list2.add(xinqis);
				xinqis = new ArrayList<>();

			} else {
				xinqis.add(date);
			}
		}
		int i = 0;
		for (List<String> list : list2) {
			i++;
			String string = list.get(0);
			String string2 = list.get(list.size() - 1);
			startEnd.add("第" + i + "周" + string + "结束" + string2);

		}
		return startEnd;

	}

	// 指定年的月开始时间和结束时间
	public static List<String> getMonthStartEnd(int year) {
		List<String> list = new ArrayList<>();
		for (int i = 1; i < 13; i++) {
			Date beginTime = getBeginTime(year, i);
			Date endTime = getEndTime(year, i);
			list.add("第" + i + "月" + ":" + sdf.format(beginTime) + ":" + sdf.format(endTime));
		}
		return list;
	}

	public static Date getBeginTime(int year, int month) {
		YearMonth yearMonth = YearMonth.of(year, month);
		LocalDate localDate = yearMonth.atDay(1);
		LocalDateTime startOfDay = localDate.atStartOfDay();
		ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));

		return Date.from(zonedDateTime.toInstant());
	}

	public static Date getEndTime(int year, int month) {
		YearMonth yearMonth = YearMonth.of(year, month);
		LocalDate endOfMonth = yearMonth.atEndOfMonth();
		LocalDateTime localDateTime = endOfMonth.atTime(23, 59, 59, 999);
		ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
		return Date.from(zonedDateTime.toInstant());
	}

	// 查询指定时间的所有日期
	public static List<String> allTime(String startDate, String endDate) throws Exception {
		Long oneDay = 1000 * 60 * 60 * 24l;
		List<String> list = new ArrayList<String>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Long startDate1 = sdf.parse(startDate).getTime();
		Long endDate1 = sdf.parse(endDate).getTime();
		for (; startDate1 <= (endDate1); startDate1 += oneDay) {
			list.add(sdf.format(new Date(startDate1)));
		}
		return list;
	}

	/**
	 * 同比
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static List<String> tonbi() throws Exception {
		List<String> list = new ArrayList<String>();
		String weekEnd = DateUtils.getWeekEnd();
		Date weekEndDate = DateUtils.sdf.parse(weekEnd);

		Calendar cal = Calendar.getInstance();
		cal.set(weekEndDate.getYear() + 1900, weekEndDate.getMonth(), weekEndDate.getDate());
		String startDate = DateUtils.sdf.format(cal.getTime());
		list.add("今年" + cal.get(Calendar.YEAR) + "-01-01:" + startDate);
		cal.add(Calendar.YEAR, -1);
		Date time = cal.getTime();
		String format = DateUtils.sdf.format(time);
		list.add("去年" + (time.getYear() + 1900) + "-01-01" + ":" + format);
		return list;

	}

	/**
	 * 环比
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static List<String> huanbi() throws Exception {
		List<String> list = new ArrayList<String>();

		String weekStart = DateUtils.getWeekStart();
		String weekEnd = DateUtils.getWeekEnd();
		Date weekEndDate = DateUtils.StringToDate("yyyy-MM-dd",weekEnd);
		Date weekStartDate = DateUtils.StringToDate("yyyy-MM-dd",weekStart);

		Calendar instance = Calendar.getInstance();
		instance.setTime(weekStartDate);
		int day1 = instance.get(Calendar.DAY_OF_YEAR);
		instance.setTime(weekEndDate);
		int day2 = instance.get(Calendar.DAY_OF_YEAR);
		int dayNum = day2 - day1;
		instance.add(Calendar.DATE, -dayNum);
		String format = DateUtils.sdf.format(instance.getTime());
		list.add("这周" + format + ":" + weekEnd);
		instance.add(Calendar.DATE, -dayNum - 1);
		format = DateUtils.sdf.format(instance.getTime());
		instance.add(Calendar.DATE, dayNum);
		String format2 = DateUtils.sdf.format(instance.getTime());
		list.add("上周" + format + ":" + format2);
		return list;
	}

	// 获取星期加日期
	public static void getWorkDay(String startDate, String endDate) throws Exception {
		List<String> allTime = allTime(startDate, endDate);
		for (String string : allTime) {
			String week = getWeek(string);
			System.out.println(string + week);
		}

	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值