欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

日期格式化工具类

程序员文章站 2022-03-22 10:05:39
...
package com.sound.cityportal.base.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 处理时间格式函数
 * 
 * @author zhangyong
 */
public class DateUtil {
	private Date date;

	public DateUtil(Date date) {
		if (null == date) {
			date = new Date();
		} else {
			this.date = date;
		}
	}

	/**
	 * 格式化时间样式
	 * 
	 * @return 返回 yyyy-MM-dd HH:mm:ss 格式字符串
	 */
	public String toFormat() {
		String patten = "yyyy-MM-dd HH:mm:ss";
		return toFormat(patten);
	}

	/**
	 * 格式化为指定格式
	 * 
	 * @param patten
	 *            日期格式如:yyyy/MM/dd
	 */
	public String toFormat(String patten) {
		SimpleDateFormat sdf = new SimpleDateFormat(patten);
		String returnStr = sdf.format(date);
		return returnStr;
	}
	public static String toFormatYmdHms() {
		String patten = "yyyy-MM-dd HH:mm:ss";
		SimpleDateFormat sdf = new SimpleDateFormat(patten);
		String returnStr = sdf.format(new Date());
		return returnStr;
	}

	/**
	 * 格式化为指定格式
	 * 
	 * @param strDate
	 *            日期格式如:yyyy-MM-dd HH:mm:ss
	 * @throws ParseException 
	 */
	public static Date str2Date(String strDate) throws ParseException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sdf.parse(strDate);
	}
	/**
	 * 
	* @Title: dateToString
	* @Description: 时间转字符串
	* @param @param date
	* @param @return
	* @param @throws ParseException    设定文件 
	* @return String    返回类型 
	* @throws 
	* @author Lvshiyang
	* @date 2017年11月23日 下午6:24:14
	 */
	public static String dateToString(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		return sdf.format(date);
		 
	}

	
	/**
	 * 计算两个日期之间相差的天数
	 * 
	 * @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 year
	 *            年份,如果不传默认使用当前年
	 * @param month
	 *            月份,入股不传默认使用当前月
	 * @return
	 */
	public static int getDaysOfMonth(Integer year, Integer month) {
		Calendar time = Calendar.getInstance();
		//获取当前年月
		int currYear = time.get(Calendar.YEAR);
		int currMonth = time.get(Calendar.MONTH) + 1;
		time.clear();
		time.set(Calendar.YEAR, null == year ? currYear : year);
		time.set(Calendar.MONTH, null == month ? currMonth : month - 1);
		return time.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

    /**
     * @Description  获取当前时间的当前月的第一天
     */
    public static String firstDayOfMonth(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar   cal_1=Calendar.getInstance();
        cal_1.add(Calendar.MONTH, -1);
        cal_1.set(Calendar.DAY_OF_MONTH,1);
        return sdf.format(cal_1.getTime());
    }

    /**
     * @Description 获取当前时间的当前月的最后一天
     */
    public static String lastDayOfMonth(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cale = Calendar.getInstance();
        cale.set(Calendar.DAY_OF_MONTH,0);
        return sdf.format(cale.getTime());
    }

	/**
     * @describe:long类型变日期类型
     * @author wangruwei
     * @date 2018年4月9日上午11:26:48
     * @param time
     * @return
     */
    public static Date longToDate(long time){
    	SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    	String d = format.format(time);  
    	Date date;
		try {
			date = format.parse(d);
			return date;
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
    	
    }
	/**
     * @describe:日期正则表达式    格式如:yyyy-MM-dd
     * @author Lvshiyang
     * @date 2018年4月19日10:36:36
     */
    public static final String YMD_REXP = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";
    public static boolean YMD_REXP(String date){
    	Pattern p = Pattern.compile(YMD_REXP);  
    	Matcher startM = p.matcher(date);
    	boolean b = startM.matches();
    	return b; 
    }

	/**
	 * java8 java.time.LocalDateTime --> java.util.Date
	 */
	public static Date LocalDateTimeToUdate() {
		LocalDateTime localDateTime = LocalDateTime.now();
		ZoneId zone = ZoneId.systemDefault();
		Instant instant = localDateTime.atZone(zone).toInstant();
		java.util.Date date = Date.from(instant);
		return date;
	}

	/**
     * @describe:日期正则表达式    格式如:yyyy-MM-dd HH:mm:ss
     * @author Lvshiyang
     * @date 2018年4月19日10:36:36
     */
    public static final String YMDHMS_REXP = "^(((20[0-3][0-9]-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|(20[0-3][0-9]-(0[2469]|11)-(0[1-9]|[12][0-9]|30))) (20|21|22|23|[0-1][0-9]):[0-5][0-9]:[0-5][0-9])$";
    public static boolean YMDHMS_REXP(String date){
    	return Pattern.compile(YMDHMS_REXP).matcher(date).matches();  
    }
}