天天看點

處理日期格式的工具類(一)

第二篇:https://blog.csdn.net/weixin_44316854/article/details/89521921

package com.ai.trial.common.util;


import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import com.ai.trial.ct.util.NumberFormatUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import com.ai.trial.ct.util.MatchUtil;

/**
 * @Description: 日期工具類
 */
public class DateUtil {
	private static final Logger logger=Logger.getLogger(DateUtil.class);
	static char[] numArray = { '〇', '一', '二', '三', '四', '五', '六', '七', '八', '九' };

	/**
	 * 描述: 将數字原樣轉為大寫
	 * @return java.lang.String
	 **/
	public static String formatNmber(int num){
		try {
			StringBuffer sbu = new StringBuffer();
			char[] val = String.valueOf(num).toCharArray();
			for (int i = 0; i < val.length; i++) {
				int i1 = Integer.parseInt(val[i] + "");
				sbu.append(numArray[i1]);
			}
			return sbu.toString();
		}catch (Exception e){
			logger.error(e.getMessage(),e);
			return "";
		}
	}
	/**
	 * 
	 * @Description: 格式化日期格式和資料庫格式一緻
	 * @param date
	 * @return 
	 */
	public static Date formatDateToSqlDate(Date date) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    String formatDateStr =formatter.format(date);
	    Date fDate = null;
		try {
			fDate = formatter.parse(formatDateStr);
		} catch (ParseException e) {
			logger.error(e.getMessage(),e);
		}
	    return fDate;
	}
	/**
	 *
	 * @Description 給定的時間加指定的月份
	 */
	public static String dateAddMonth(String date,int month){
		try{
			SimpleDateFormat formatter = new SimpleDateFormat("yyyy-M-d");
			Date d = formatter.parse(date);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(d);
			calendar.add(Calendar.MONTH,month);
			String dateStr =  formatter.format(calendar.getTime());
			return dateStr;
		}catch(Exception e){
			logger.error(e.getMessage(),e);
			return "";
		}
		
	}
	/**
	 *
	 * @Description 格式化時間
	 */
	public static  String formatDate(Date date,String format){
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
		return simpleDateFormat.format(date);
		
	}
	
	/**
	 *
	 * @Description 擷取大寫的時間(二)
	 */
	public static String getDateOfCH(Date date){
		StringBuilder sb = new StringBuilder(); 
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		char[] year = (calendar.get(Calendar.YEAR)+"").toCharArray();
		int month = calendar.get(Calendar.MONTH)+1;
		int day = calendar.get(Calendar.DAY_OF_MONTH);
		for (int i = 0; i < year.length; i++) {
			String num = String.valueOf(year[i]);
			sb.append(formatNmber(Integer.parseInt(num)));
		}
		sb.append("年"+month+"月"+day+"日");
		return NumberFormatUtils.changeNumber(sb.toString());
	}
	/**
	 *
	 * @Description 輸入月數,傳回年月
	 */
	public static String  getResultByMonth(int months){
		int year = months/12;
		int month = months%12;
		return year+"年"+month+"月";
	}

	/**
	 * 描述: 根據**年**月傳回總月份
	 * @Param [result]
	 * @return int
	 **/
	public static int getMonthByResult(String result){
		int months = 0;
		try {
			int yearIndex = 0;
			int year = 0;
			if(result.contains("年")){
				yearIndex = result.indexOf("年");
				year = Integer.valueOf(result.substring(0,yearIndex));
			}
			int month = 0;
			if(result.contains("月")){
				month = Integer.valueOf(result.substring(yearIndex+1,result.length()-1));
			}
			System.out.println(month);
			months = year*12+month;
		} catch (Exception e) {
			logger.error(e.getMessage(),e);
		}
		return months;
	}
	
	/**
	 * 将**年**月轉為月份傳回
	 * @param result
	 * @return
	 */
	public static int getMonthResult(String result){
		int months = 0;
		try {
			int year = 0;
			int month = 0;
			if(!MatchUtil.isEmpty(result) && result.contains("年")){
				 year =  Integer.valueOf(StringUtils.substringBefore(result,"年"));
				 if(result.contains("月")){
					 month = Integer.valueOf(StringUtils.substringBetween(result, "年", "月"));
				 }
			}
			months = year*12+month;
		} catch (Exception e) {
			logger.error(e.getMessage(),e);
			return months;
		}
		return months;
	}

	public static void main(String[] args) {
		String result = "10年";
		System.out.println(getMonthByResult(result));
		SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date parse = sim.parse("2017-09-09");
			String dateOfCH = getDateOfCH(parse);
			System.err.print(dateOfCH);
		} catch (Exception e){

		}

	}

	/**
	 * 根據傳入的日期字元串轉換成相應的日期對象,如果字元串為空或不符合日期格
	 * 式,則傳回目前時間。
	 * @param strDate String 日期字元串
	 * @return java.util.Date 日期對象
	 * */
	public static Date getDateFromString(String strDate,String format)
	{
		if (StringUtils.isEmpty(strDate))
		{
			return new Date(System.currentTimeMillis());
		}
		try
		{
			SimpleDateFormat sdfLongTimePlus = new SimpleDateFormat(format);
			return sdfLongTimePlus.parse(strDate);
		}
		catch (Exception ex)
		{
			return new Timestamp(System.currentTimeMillis());
		}
	}

	/**
	 * @Title:  按着自然月日年擷取前你你月的具體時間
	 * @Description: TODO()
	 * @param    @param num
	 * @param    @return
	 * @return   String yyyy-MM-dd
	 * @throws
	 */
	public static String getNatureDateStart(int timeType,int num){
		String timeStr = "";
		try {
			Calendar calo = Calendar.getInstance();
			Date date = calo.getTime();
			if(timeType == 0){
				SimpleDateFormat thismonthFormat = new SimpleDateFormat("yyyy-01-01 00:00:00");
				date = DateUtil.getDateFromString(thismonthFormat.format(date));
				calo.setTime(date);
				calo.add(Calendar.YEAR, -num+1);
			}else if(timeType == 1){
				SimpleDateFormat thismonthFormat = new SimpleDateFormat("yyyy-MM-01 00:00:00");
				date = DateUtil.getDateFromString(thismonthFormat.format(date));
				calo.setTime(date);
				calo.add(Calendar.MONTH, -num+1);
			}else if(timeType == 2){
				calo = getCurrentMonday();
				calo.add(Calendar.DAY_OF_WEEK, -num*7);
			}else if(timeType == 3){
				SimpleDateFormat thismonthFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
				date = DateUtil.getDateFromString(thismonthFormat.format(date));
				calo.setTime(date);
				calo.add(Calendar.DAY_OF_WEEK, -num+1);
			}
			timeStr = DateUtil.getPlusTime(calo.getTime());
		} catch (Exception e) {
			System.out.println(" ERROR");
			logger.error(e.getMessage(),e);
		}
		return timeStr;
	}

	// (2) 獲得本周星期一的日期
	public static Calendar getCurrentMonday()
	{
		int mondayPlus =  getMondayPlus();
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus);
		Date monday = currentDate.getTime();
		Calendar c = Calendar.getInstance();
		c.setTime(monday);
		return c;
	}
	// (1)獲得目前日期與本周一相差的天數
	private static  int getMondayPlus()
	{
		Calendar cd = Calendar.getInstance();
		// 獲得今天是一周的第幾天,星期日是第一天,星期二是第二天......
		int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
		if (dayOfWeek == 1)
		{
			return -6;
		}
		else
		{
			return 2 - dayOfWeek;
		}
	}

	/**
	 * Descrption:取得目前日期,格式為:yyyy-MM-dd HH:mm:ss
	 * @return String
	 * @throws Exception
	 */
	public static String getPlusTime(Date date) throws Exception{
		if(date == null ){
			return null;
		} 
		try
		{
		SimpleDateFormat sdfLongTimePlus = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String nowDate = sdfLongTimePlus.format(date);
			return nowDate;
		}
		catch (Exception e)
		{
			throw e;
		}
	}

	/**
	 * 根據傳入的日期字元串轉換成相應的日期對象,如果字元串為空或不符合日期格
	 * 式,則傳回目前時間。
	 * @param strDate String 日期字元串
	 * @return java.util.Date 日期對象
	 * */
	public static Date getDateFromString(String strDate)
	{
		if (StringUtils.isEmpty(strDate))
		{
			return new Date(System.currentTimeMillis());
		}
		try
		{
			SimpleDateFormat sdfLongTimePlus = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return sdfLongTimePlus.parse(strDate);
		}
		catch (Exception ex)
		{
			return new Timestamp(System.currentTimeMillis());
		}
	}

	/**
	 * 計算兩個日期之間相差的天數
	 * @param smdate 較小的時間
	 * @param bdate  較大的時間
	 * @return 相差天數
	 * @throws ParseException
	 */
	public static int daysBetween(Date smdate,Date bdate) throws ParseException
	{
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		smdate=sdf.parse(sdf.format(smdate));
		bdate=sdf.parse(sdf.format(bdate));
		Calendar cal = Calendar.getInstance();
		cal.setTime(smdate);
		long time1 = cal.getTimeInMillis();
		cal.setTime(bdate);
		long time2 = cal.getTimeInMillis();
		long between_days=(time2-time1)/(1000*3600*24);

		return Integer.parseInt(String.valueOf(between_days));
	}

	/**
	 * 處理時間日期類型問題
	 * @param startTimeStr
	 * @param endTimeStr
	 * @param timeType
	 * @return
	 */
	public static Map<String,Object> getQueryPatameter(String startTimeStr, String endTimeStr, String timeType){
		Map<String,Object> param =new HashMap<>();
		Date nowDate = new Date();
		Date endDate = null;
		Date startDate = null;
		if(org.springframework.util.StringUtils.hasText(startTimeStr) && org.springframework.util.StringUtils.hasText(endTimeStr)){
			startDate = DateUtil.getDateFromString(startTimeStr,"yyyy-MM-dd");
			endDate = DateUtil.getDateFromString(endTimeStr,"yyyy-MM-dd");
		} else if (org.springframework.util.StringUtils.hasText(timeType)){
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(nowDate);
			calendar.set(Calendar.HOUR_OF_DAY, 0);
			calendar.set(Calendar.SECOND,0);
			calendar.set(Calendar.MINUTE,0);
			endDate = calendar.getTime();
			if("oneM".equals(timeType)){
				calendar.setTime(endDate);
				calendar.add(Calendar.DATE, -30);
				startDate = calendar.getTime();
			}else if("twoM".equals(timeType)){
				calendar.setTime(endDate);
				calendar.add(Calendar.DATE, -60);
				startDate = calendar.getTime();
			}else if("oneY".equals(timeType)){
				calendar.setTime(endDate);
				calendar.add(Calendar.YEAR, -1);
				startDate = calendar.getTime();
			}
		}
		param.put("startDate", startDate);
		param.put("endDate", endDate);
		return param;
	}
}