java 获取当前时间的上下几月、上下几周、前后几天等各种日期转换

package com.sf.core.util;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Maps;

import static org.apache.commons.lang.StringUtils.EMPTY;

public class DateUtils {
	
	private static Logger logger = LoggerFactory.getLogger(DateUtils.class);

	private static final String YMD = "yyyy-MM-dd";

	private static final String YMD1 = "yyyyMMdd";

	private static final String YMDHMS = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 获取当前时间   年月日时分秒
	 * @return
	 */
	public static String getCurrentTime() {
		SimpleDateFormat dateFormat = new SimpleDateFormat(YMDHMS);
		Date d = new Date();
		return dateFormat.format(d);
	}

	public static String getCurrentTimeStr(){
		String current = getCurrentTime();
		String currentStr = current.replaceAll("-","").replaceAll(" ","").replaceAll(":","");
		return currentStr;
	}
	
	public static String  getCurrentTimeStrhms() {
		String str = getCurrentTimeStr();
		String str1 = str.substring(8,str.length());
		return str1;
	}
	
	
	/**
	 * 获取当前时间   年月日
	 * @return
	 */
	public static String getCurrentDate() {
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat(YMD);
		return sdf.format(d);
	}
	
	public static String getCurrentDateStr() {
		String current = getCurrentDate();
		String currentStr = current.replaceAll("-", "");
		return currentStr;
	}
	
	public static String getCurrentDateYMD() {
		String date = getCurrentDate();
		String [] dates = date.split("-");
		StringBuilder sb = new StringBuilder();
		sb.append(dates[0]);
		sb.append("年");
		sb.append(dates[1]);
		sb.append("月");
		sb.append(dates[2]);
		sb.append("日");
		return sb.toString();
	}

	/**
	 * yyyy-MM-dd 转 yyyy年MM月dd日
	 */
	public static String getNianYueRi(String yyyy_MM_ddDate) {
		String [] dates = yyyy_MM_ddDate.split("-");
		StringBuilder sb = new StringBuilder();
		sb.append(dates[0]);
		sb.append("年");
		sb.append(dates[1]);
		sb.append("月");
		sb.append(dates[2]);
		sb.append("日");
		return sb.toString();
	}

	/**
	 *获得本周一与当前日期相差的天数
	 * 
	 * @return
	 */
	public static int getMondayPlus() {
		Calendar cd = Calendar.getInstance();
		int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
		if (dayOfWeek == 1) {
			return -6;
		} else {
			return 2 - dayOfWeek;
		}
	}

	/**
	 * 获得当前周     周一的日期
	 * @return
	 */
	public static String getCurrentMonday() {
		SimpleDateFormat df = new SimpleDateFormat(YMD);
		Calendar cld = Calendar.getInstance(Locale.CHINA);
		//以周一为首日
		cld.setFirstDayOfWeek(Calendar.MONDAY);
		//当前时间
		cld.setTimeInMillis(System.currentTimeMillis());
		//周一
		cld.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		String monday = df.format(cld.getTime());
		return monday;
	}


	/**
	 * 获得当前周     周日 的日期
	 * @return
	 */
	public static String getPreviousSunday() {
		SimpleDateFormat df = new SimpleDateFormat(YMD);
		Calendar cld = Calendar.getInstance(Locale.CHINA);
		//以周一为首日
		cld.setFirstDayOfWeek(Calendar.MONDAY);
		//当前时间
		cld.setTimeInMillis(System.currentTimeMillis());
		//周日
		cld.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		String weekday = df.format(cld.getTime());
		return weekday;
	}

	/**
	 * 获取月份     开始日期
	 * @return
	 */
	public static String getMinMonthDate(String date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(YMD);
		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
			calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
			return dateFormat.format(calendar.getTime());
		} catch (java.text.ParseException e) {
			logger.error("getMinMonthDate.error:", e);
		}
		return null;
	}
	
	public static String getMinMonthDateYmd(String date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(YMD1);
		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
			calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
			return dateFormat.format(calendar.getTime());
		} catch (java.text.ParseException e) {
			logger.error("getMinMonthDate.error:", e);
		}
		return null;
	}

	/**
	 * 获得月份    结束日期
	 * @return
	 */
	public static String getMaxMonthDate(String date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(YMD);
		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
			calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
			return dateFormat.format(calendar.getTime());
		} catch (java.text.ParseException e) {
			logger.error("getMaxMonthDate.error:", e);
		}
		return null;
	}
	
	public static String getMaxMonthDateYmd(String date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(YMD1);
		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
			calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
			return dateFormat.format(calendar.getTime());
		} catch (java.text.ParseException e) {
			logger.error("getMaxMonthDate.error:", e);
		}
		return null;
	}

	/**
	 * 每月第一天
	 * @return
	 */
	public static String getMonthFirstDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.add(Calendar.MONTH, 0);
		SimpleDateFormat sdf = new SimpleDateFormat(YMD);
		String firstDay = sdf.format(calendar.getTime());
		return firstDay;
	}

	/**
	 * 每月最后一天
	 * @return
	 */
	public static String getMonthLastDay() {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		calendar.set(Calendar.DAY_OF_MONTH, 0);
		calendar.add(Calendar.MONTH, 1);
		SimpleDateFormat sdf = new SimpleDateFormat(YMD);
		String firstDay = sdf.format(calendar.getTime());
		return firstDay;
	}

	/**
	 * 获取当前月天数
	 * @return
	 */
	public static int getDaysOfMonth(String date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(YMD);
		Calendar calendar = Calendar.getInstance();
		try {
			calendar.setTime(dateFormat.parse(date));
		} catch (ParseException e) {
			logger.error("getMaxMonthDate.error:", e);
		}
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 获取当前时间    年 月 日 时 分 秒
	 * @return
	 */
	public static Map<String, String> getCurrentTimeSeparate() {
		Map<String, String> map = Maps.newHashMap();
		Calendar now = Calendar.getInstance();
		map.put("year", String.valueOf(now.get(Calendar.YEAR)));
		map.put("month", String.valueOf((now.get(Calendar.MONTH) + 1)));
		map.put("today", String.valueOf(now.get(Calendar.DAY_OF_MONTH)));
		map.put("hour", String.valueOf(now.get(Calendar.HOUR_OF_DAY)));
		map.put("minute", String.valueOf(now.get(Calendar.MINUTE)));
		map.put("second", String.valueOf(now.get(Calendar.SECOND)));
		return map;
	}

	/**
	 * 获取月份的每一天
	 *
	 * @param date
	 * @return
	 */
	public static List<String> getDayByMonth(String date) {
		String[] months = date.split("-");
		int yearParam = Integer.parseInt(months[0]);
		int monthParam = Integer.parseInt(months[1]);
		List<String> list = new ArrayList<String>();
		Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
		aCalendar.set(yearParam, monthParam, -1);
		//年份
		int year = aCalendar.get(Calendar.YEAR);
		//月份
		int month = aCalendar.get(Calendar.MONTH) + 1;
		int day = aCalendar.getActualMaximum(Calendar.DATE);
		for (int i = 1; i <= day; i++) {
			String aDate = null;
			if (month < 10 && i < 10) {
				aDate = String.valueOf(year) + "-0" + month + "-0" + i;
			}
			if (month < 10 && i >= 10) {
				aDate = String.valueOf(year) + "-0" + month + "-" + i;
			}
			if (month >= 10 && i < 10) {
				aDate = String.valueOf(year) + "-" + month + "-0" + i;
			}
			if (month >= 10 && i >= 10) {
				aDate = String.valueOf(year) + "-" + month + "-" + i;
			}

			list.add(aDate);
		}
		return list;
	}

	/**
	 * 获取两个时间之间的每一天
	 *
	 * @param bigtimeStr
	 * @param endTimeStr
	 * @return
	 * @throws ParseException
	 */
	public static List<String> getDays(String bigtimeStr, String endTimeStr) throws ParseException {
		Date bigtime = new SimpleDateFormat(YMDHMS).parse(bigtimeStr + " 00:00:00");
		Date endtime = new SimpleDateFormat(YMDHMS).parse(endTimeStr + " 00:00:00");
		//定义一个接受时间的集合
		List<Date> lDate = new ArrayList<>();
		lDate.add(bigtime);
		Calendar calBegin = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calBegin.setTime(bigtime);
		Calendar calEnd = Calendar.getInstance();
		// 使用给定的 Date 设置此 Calendar 的时间
		calEnd.setTime(endtime);
		// 测试此日期是否在指定日期之后
		while (endtime.after(calBegin.getTime())) {
			// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
			calBegin.add(Calendar.DAY_OF_MONTH, 1);
			lDate.add(calBegin.getTime());
		}
		List<String> datas = new LinkedList<>();
		for (Date date : lDate) {
			datas.add(new SimpleDateFormat(YMD).format(date));
		}
		return datas;
	}

	/**
	 * 时间字符串转时间类型
	 * @return
	 */
	public static Date stringTransformDate(String date) {
		Date date1 = null;
		SimpleDateFormat simdate1 = new SimpleDateFormat(YMD);
		try {
			date1 = simdate1.parse(date);
		} catch (ParseException e) {
			logger.error("stringTransformDate.error:", e);
		}
		return date1;
	}

	public static String dateTransformDate(Date date){
		//可以转成你想要的格式 yyyy/MM/dd HH:mm:ss 等等
		SimpleDateFormat format = new SimpleDateFormat(YMDHMS);
		String dateString = format.format(date);
		return dateString;
	}

	/**
	 * 得到当前时间的前几天、后几天
	 * @return
	 */
	public static String getDateBefore(int day) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DATE, day);
		Date date = calendar.getTime();
		DateFormat df = new SimpleDateFormat(YMD);
		String format = df.format(date);
		return format;
	}

	/**
	 * 获取当前时间的前几个月、后几个月的当天时间
	 * @return
	 */
	public static String getMonthBefore(int month) {
		SimpleDateFormat format = new SimpleDateFormat(YMD);
		Calendar c = Calendar.getInstance();
		c.setTime(new Date());
		c.add(Calendar.MONTH, month);
		Date m = c.getTime();
		String mon = format.format(m);
		return mon;
	}
	
	public static void main(String[] args) {
		System.out.println(getNextYearPreDay("20220901",1));
	}
	
	public static boolean isAlphaNumeric(String s) {
		Pattern p = Pattern.compile("[0-9a-zA-Z]{1,}");
		Matcher m = p.matcher(s);
		return m.matches();
	}
	public static boolean isAlpha(String s) {
		Pattern p = Pattern.compile("[a-zA-Z]{1,}");
		Matcher m = p.matcher(s);
		return m.matches();
	}
	
	/**
	 * 获取指定日期的前几年、后几年
	 * @param date
	 * @return
	 */
	public static String getNextYearPreDay(String date,int num) {
		SimpleDateFormat format = new SimpleDateFormat(YMD1);
		Calendar ca = Calendar.getInstance();
		try {
			ca.setTime(format.parse(date));
			ca.add(Calendar.YEAR, num);
			// ca.add(Calendar.MONTH, -1);
			ca.add(Calendar.DATE,-1);
			Date y = ca.getTime();
			String year = format.format(y);
			return year;
		} catch (Exception e) {
			logger.error("getNextYearPreDay.error:", e);
		}
		return null;
	 }

	/**
	 *  获取几天前、几天后的前一个月当天时间
	 * @return
	 */
	public static String getMonthDay(int month) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DATE, month);
		Date date = calendar.getTime();

		SimpleDateFormat format = new SimpleDateFormat(YMD);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MONTH, -1);
		Date m = c.getTime();
		String mon = format.format(m);
		return mon;
	}

	/**
	 * 获取指定日期的前一天
	 *
	 * @param day
	 * @return
	 */
	public static String getDay(String day) {
		Calendar c = Calendar.getInstance();
		Date date = null;
		try {
			date = new SimpleDateFormat(YMD).parse(day);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.setTime(date);
		int day1 = c.get(Calendar.DATE);
		c.set(Calendar.DATE, day1 - 1);
		String dayAfter = new SimpleDateFormat(YMD).format(c.getTime());
		return dayAfter;
	}

	/**
	 * @Description: 获取指定日期的前几天、后几天
	 * @Author: Lee
	 * @Date: 2020/10/20
	 **/
	public static String getDays(String dayTime,int day) {
		Calendar c = Calendar.getInstance();
		Date date = null;
		try {
			date = new SimpleDateFormat("yyyyMMdd").parse(dayTime);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		c.setTime(date);
		int day1 = c.get(Calendar.DATE);
		c.set(Calendar.DATE, day1 + (day));
		String dayAfter = new SimpleDateFormat("yyyyMMdd").format(c.getTime());
		return dayAfter;
	}

	/**
	 * @Description: 获取两个时间之间存在多少天数,精确到小数位
	 * @Author: Lee
	 * @Date: 2020/10/19
	 **/
	public static String getDayTimes(String dateStart, String dateEnd) {
		try {
			//设置转换的日期格式
			SimpleDateFormat sdf = new SimpleDateFormat(YMDHMS);

			//开始时间
			Date startDate = sdf.parse(dateStart);
			//结束时间
			Date endDate = sdf.parse(dateEnd);

			//获取两个时间之间的时间戳值
			long dateNum = (endDate.getTime() - startDate.getTime()) / 1000;
			//一天时间戳
			long dayNum = 60L * 60 * 24;
			double dateDouble = (double) dateNum;
			double dayDouble = (double) dayNum;
			//保留一位小数计算天数
			//设置保留位数
			DecimalFormat df = new DecimalFormat("0.00");
			String dayTimes = df.format(dateDouble / dayDouble);
			return dayTimes;

		} catch (ParseException e) {
			return "0";
		}
	}
	
	/**
	 * 将yyyyMMdd日期字符串转成yyyy-MM-dd格式
	 *
	 * @author 80001117
	 * @Date 2017年5月26日 上午11:33:58
	 * @param dateStr
	 * @return
	 */
	public static final String dateStrSwitch(String dateStr) {
		if (dateStr != null && dateStr.length() == 8) {
			try {
				new SimpleDateFormat("yyyyMMdd").parse(dateStr);

				String year = dateStr.substring(0, 4);
				String month = dateStr.substring(4, 6);
				String day = dateStr.substring(6, 8);
				return year + "-" + month + "-" + day;
			} catch (ParseException e) {
				logger.error(e.getMessage(), e);
			}
		}
		return EMPTY;
	}
	
	/**
	 * 将yyyy-MM-dd日期字符串转成yyyyMMdd格式
	 *
	 * @author 80001117
	 * @Date 2017年5月26日 下午1:59:03
	 * @return
	 */
	public static final String dateStrReplace(String dateStr) {
		return dateStr == null ? EMPTY : dateStr.replaceAll("-", EMPTY);
	}
	
	/**
	 * 校验日期格式是否正确
	 * 样例: String date = "20220801";
	 *	isLegalDate(date.length(),date,"yyyyMMdd")
	 * @param length 
	 * @param sDate
	 * @param format
	 * @return
	 */
	public static boolean isLegalDate(int length, String sDate, String format) {
		int legalLen = length;
		if ((sDate == null) || (sDate.length() != legalLen)) {
			return false;
		}
		DateFormat formatter = new SimpleDateFormat(format);
		try {
			Date date = formatter.parse(sDate);
			return sDate.equals(formatter.format(date));
		} catch (Exception e) {
			return false;
		}
	}
	

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值