时间工具类

package util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 时间工具类
 * 
 * @author YaJun
 *
 */
public class TimeUtil {
	
	
	public static final int H_M = 0;
	public static final int H_M_S = 1;
	public static final int Y_M_D = 2;
	public static final int Y_M_D_H_M = 3;
	public static final int Y_M_D_H_M_S = 4;
	public static final int MM = 5;
	public static final int yyyyMMdd = 6;
	public static final int MMdd = 7;
	private static SimpleDateFormat dateformat0;
	private static SimpleDateFormat dateformat1;
	private static SimpleDateFormat dateformat2;
	private static SimpleDateFormat dateformat3;
	private static SimpleDateFormat dateformat4;
	private static SimpleDateFormat dateformat5;
	private static SimpleDateFormat dateformat6;
	private static SimpleDateFormat dateformat7;
	static{
		dateformat0 = new SimpleDateFormat("HH:mm");
		dateformat1 = new SimpleDateFormat("HH:mm:ss");
		dateformat2 = new SimpleDateFormat("yyyy-MM-dd");
		dateformat3 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		dateformat4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		dateformat5 = new SimpleDateFormat("MM");
		dateformat6 = new SimpleDateFormat("yyyyMMdd");
		dateformat7 = new SimpleDateFormat("MM-dd");
		
	}
	private static SimpleDateFormat getFormat(int num){
		SimpleDateFormat dateformat = null;
		switch(num){
			case TimeUtil.H_M:
				dateformat = dateformat0;
				break;
			case TimeUtil.H_M_S:
				dateformat = dateformat1;
				break;
			case TimeUtil.Y_M_D:
				dateformat = dateformat2;
				break;
			case TimeUtil.Y_M_D_H_M:
				dateformat = dateformat3;
				break;
			case TimeUtil.Y_M_D_H_M_S:
				dateformat = dateformat4;
				break;
			case TimeUtil.MM:
				dateformat = dateformat5;
				break;
			case TimeUtil.yyyyMMdd:
				dateformat = dateformat6;
				break;
			case TimeUtil.MMdd:
				dateformat = dateformat7;
				break;
			default:break;
		}
		return dateformat;
	}

	public static String fromatDate(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return dateFormat.format(date);
	}

	// 获取前一天时间
	public static String getBeforeDateString(Date date, int days) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
		return dateFormat.format(calendar.getTime());
	}
	// 获取前一天时间
	public static Date getBeforeDate(Date date, int days) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
		return calendar.getTime();
	}

	public static String getBeforeYMD(Date date, int days) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
		return dateFormat.format(calendar.getTime());
	}

	/**
	 * @param date
	 * @param num
	 *            前N小时
	 * @return
	 */
	public static String getBeforeHour(Date date, int num) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd H");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.HOUR_OF_DAY, -num);
		return dateFormat.format(calendar.getTime());
	}

	// 返回系统当前日期,格式yyyyMMdd
	public static String getNowDate() {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		return dateFormat.format(new Date());
	}
	// 返回系统当前日期,格式yyyyMMdd
	public static String getNowDate(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		return dateFormat.format(date);
	}

	// 返回系统当前日期,格式yyyyMMdd
	public static String getYearAndMonth() {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
		return dateFormat.format(new Date());
	}
	// 返回系统当前日期,格式yyyyMMdd
	public static String getYear(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy"); 
		return dateFormat.format(new Date());
	}
	// 返回系统当前日期,格式MM
	public static String getMonth(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
		return dateFormat.format(date);
	}
	// 返回系统当前日期,格式dd
	public static String getDate(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("dd");
		return dateFormat.format(date);
	}

	public static String getNextYearAndMonth(Date date, int days) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + days);
		return dateFormat.format(calendar.getTime());
	}

	// 返回系统当前日期,格式yyyy-MM-dd HH:mm:ss
	public static String getDate() {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar calendar = Calendar.getInstance();
		return dateFormat.format(calendar.getTime());
	}

	// 获取当前小时
	public static int getNowHour() {
		SimpleDateFormat sdf = new SimpleDateFormat("HH");
		return Integer.parseInt(sdf.format(new Date()));
	}

	// 获取当前时间
	public static int getNowMinute() {
		SimpleDateFormat sdf = new SimpleDateFormat("mm");
		return Integer.parseInt(sdf.format(new Date()));
	}

	// 获取昨天下午9点
	public static String getYesterdayPMNine() {
		String yesterday = getBeforeDateString(new Date(), -1);
		return yesterday + " 21:00:00";
	}

	// 获取今天上午8点
	public static String getTodayAMEight() {
		String yesterday = getBeforeDateString(new Date(), 0);
		return yesterday + " 08:00:00";
	}

	/**
	 * 计算规定时间(分钟)之前的时间
	 * 
	 * @param minute
	 * @return
	 */
	public static String getTimeBefore(int minute) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date();
		long time = date.getTime() - minute * 60 * 1000;
		String t = dateFormat.format(time);
		return t;
	}

	// 返回ymd时间
	public static String getDate(int y, int m, int d) {
		String date = "";
		date = date + y;
		if (m < 10) {
			date = date + "0" + m;
		} else {
			date = date + m;
		}
		if (d < 10) {
			date = date + "0" + d;
		} else {
			date = date + d;
		}
		return date;
	}

	/**
	 * 返回格日期
	 * 
	 * @param num
	 * @param stringDate
	 * @return
	 */
	public static long getFormatDate(String stringDate) {
		Date resultDate = null;
		SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			if (dateformat != null)
				resultDate = dateformat.parse(stringDate);
			return resultDate.getTime();
		} catch (ParseException e) {
			e.printStackTrace();
			return 0;
		}
	}

	/**
	 * 获得当天时间的毫秒数
	 * 
	 * @return
	 */
	public static long gettoday() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTimeInMillis();
	}

	// java得到上个月的第一天
	public static String getFirstMonthDay() {
		String enddate = getLastMonthDay();
		String[] ss = enddate.split("-");
		String startdate = ss[0] + "-" + ss[1] + "-01";
		return startdate;
	}

	// java得到上个月的最后一天
	public static String getLastMonthDay() {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return dateFormat.format(cal.getTime());
	}

	// 将Date类型时间转化为String格式 yyyy-MM-dd HH:mm:ss
	public static String transDate(Date date) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		if (date == null)
			return null;
		else
			return dateFormat.format(date);
	}

	// 获取时间的年份 参数格式: yyyy-MM-dd
	public static String getYear(String date) {
		return date.substring(0, 4);
	}

	// 获取时间的月份 参数格式: yyyy-MM-dd

	public static String getMonth(String date) {
		return date.substring(5, 7);
	}

	// 获取时间的天 参数格式: yyyy-MM-dd
	public static String getDay(String date) {
		return date.substring(8, 10);
	}

	// 将两个日期转化为一个xx年xx月xx日到xx年xx月xx日的字符串
	public static String transDate(String... date) {
		String dateStr = "";
		if (date.length == 2) {
			String startdate = date[0];
			String enddate = date[1];
			String startyear = getYear(startdate);
			String startmonth = getMonth(startdate);
			String startday = getDay(startdate);
			String endyear = getYear(enddate);
			String endmonth = getMonth(enddate);
			String endday = getDay(enddate);
			dateStr = startyear + "年" + startmonth + "月" + startday + "日" + "到" + endyear + "年" + endmonth + "月"
					+ endday + "日";
		} else if (date.length == 1) {
			String startdate = date[0];
			String startyear = getYear(startdate);
			String startmonth = getMonth(startdate);
			String startday = getDay(startdate);
			dateStr = startyear + "年" + startmonth + "月" + startday + "日";
		}
		return dateStr;
	}

	/**
	 * 日期格式转换
	 * 
	 * @param pattern
	 * @param date
	 * @return
	 */
	public static String getFormatString(String pattern, Date date) {
		SimpleDateFormat formater = new SimpleDateFormat(pattern);
		String riqi = formater.format(date);
		return riqi;
	}

	public static boolean isNumeric(String str) {
		if (str == null)
			return false;
		Pattern pattern = Pattern.compile("[-]*[0-9]+");
		Matcher isNum = pattern.matcher(str);
		if (!isNum.matches()) {
			return false;
		}
		return true;
	}

	public static String getYMD(long time) {
		SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMdd");
		return dateformat.format(new Date(time));
	}
	
	//java获取当前月每天的日期
	public static List<String> getDayListOfMonth() {
	    List<String> list = new ArrayList<String>();
	    Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
	    int year = aCalendar.get(Calendar.YEAR);//年份
	    int month = aCalendar.get(Calendar.MONTH)+1;//月份
	    int day = aCalendar.get(Calendar.DATE);
	    for (int i = 1; i <= day; i++) {
	        String aDate = String.valueOf(year)+"-"+month+"-"+i;
	        System.out.println(aDate);
	        list.add(aDate);
	    }
	    return list;
	}
	
	//获取指定日期所在月份的每一天月日
	public static List<String> getDayListOfMonthorDay(Date date) {
	    List<String> list = new ArrayList<String>();
	    Calendar c = Calendar.getInstance();
	    c.setTime(date);
	    c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
	    int month = c.get(Calendar.MONTH)+1;//月份
	    int day = c.get(Calendar.DATE);
	    //System.out.println(c.getTime());
	    //System.out.println(month);
	    //System.out.println(day);
	    for (int i = 1; i <= day; i++) {
	        String aDate = month+"月"+i+"日";
	        list.add(aDate);
	    }
	    return list;
	}


	/**
	 * 获取当前日期是星期几<br>
	 * 
	 * @param date
	 * @return 当前日期是星期几
	 */
	public static String getWeekOfDate(Date date) {
		String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"  };
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (w < 0)
			w = 0;
		return weekDays[w];
	}

	// 获取当前时间所在周的开始日期
	public static Date getFirstDayOfWeek(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
		return c.getTime();
	}

	// 获取当前时间所在周的结束日期
	public static Date getLastDayOfWeek(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
		return c.getTime();
	}
	
	// 获取当前时间所在周的结束日期
	public static List<Date> getDayOfWeek(Date date) {
		List<Date> list = new ArrayList<Date>();
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		
		for (int i = 0; i < 7; i++) {
			c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + i); // Sunday
			list.add(c.getTime());
		}
		return list;
	}
	/**
	 * 获取上一个月的时间
	 * @param date
	 * @param type 1上一周2上一月
	 * @return
	 */
	public static Date getFirstDate(Date date,int type){
		Calendar cl = Calendar.getInstance();
		 cl.setTime(date);
		// cl.add(Calendar.DAY_OF_YEAR, -1);
		//一天
		 if (type == 1){
			//一周
			 cl.add(Calendar.WEEK_OF_YEAR, -1);
		 }else {
			 cl.add(Calendar.MONTH, -1);
			//从现在算,之前一个月,如果是2个月,那么-1-----》改为-2
		 }
		return cl.getTime();
	}
	
	public static Date getFirstDateMonth(Date date,int type){
		Calendar cl = Calendar.getInstance();
		cl.setTime(date);
		cl.add(Calendar.MONTH, type);
		//从现在算,之前一个月,如果是2个月,那么-1-----》改为-2
		 
		return cl.getTime();
	}
	
	/**
	 * 返回格日期
	 * @param format
	 * @param stringDate
	 * @return
	 */
	public static Date getFormatDate(String format,String stringDate){
		Date date = null;
		try {
			date = new SimpleDateFormat(format).parse(stringDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	/**
	 * 获取指定日期所在月份开始的时间戳
	 * @param date 指定日期
	 * @return
	 */
	public static Date getMonthBegin(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		
		//设置为1号,当前日期既为本月第一天  
		c.set(Calendar.DAY_OF_MONTH, 1);
		//将小时至0  
		c.set(Calendar.HOUR_OF_DAY, 0);  
		//将分钟至0  
		c.set(Calendar.MINUTE, 0);  
		//将秒至0  
		c.set(Calendar.SECOND,0);  
		//将毫秒至0  
		c.set(Calendar.MILLISECOND, 0);  
		// 获取本月第一天的时间戳  
		return c.getTime();  
	}
	/**
	 * 获取指定日期所在月份结束的时间戳
	 * @param date 指定日期
	 * @return
	 */
	public static Date getMonthEnd(Date date) {
		Calendar c = Calendar.getInstance();  
		c.setTime(date);
		
		//设置为当月最后一天
		c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));  
		//将小时至23
		c.set(Calendar.HOUR_OF_DAY, 23);  
		//将分钟至59
		c.set(Calendar.MINUTE, 59);  
		//将秒至59
		c.set(Calendar.SECOND,59);  
		//将毫秒至999
		c.set(Calendar.MILLISECOND, 999);  
		// 获取本月最后一天的时间戳  
		return c.getTime();
	}
	
	/**
	 * 将long型的秒转换为日期
	 * author YuWenLin
	 * date 2011-3-24 上午01:57:37
	 * @param num
	 * @param time
	 * @return
	 */
	public static String getFormatString(int num, long time){//time(秒)
		if(time <=0) 
			return "0000-00-00";
		else{
			SimpleDateFormat dateformat = getFormat(num);
			return dateformat==null?"0000-00-00":dateformat.format(new Date(time*1000));
		}
	}
	
	/**
	 * 将long型的毫秒转换为日期
	 * author YuWenLin
	 * date 2011-3-24 上午01:58:23
	 * @param num
	 * @param time
	 * @return
	 */
	public static String getFormatMMSecondString(int num,long time){
		if(time <=0) 
			return "0000-00-00";
		else{
			SimpleDateFormat dateformat = getFormat(num);
			return dateformat==null?"0000-00-00":dateformat.format(new Date(time));
		}
	}
	/**
	 * 返回格式化字符串型日期
	 * @param num
	 * @param date
	 * @return
	 */
	public static String getFormatString(int num, Date date){
		if(date == null) 
			return "0000-00-00";
		else{
			SimpleDateFormat dateformat = getFormat(num);
			return dateformat==null?"0000-00-00":dateformat.format(date);
		}
	}
	
	/**
	 * 返回long(毫秒)
	 */
	public static long getFormatMillisecond(int num,String stringDate){
		return getFormatDate(num,stringDate).getTime();
	}
	/**
	 * 返回long(秒)
	 */
	public static long getFormatSecond(int num,String stringDate){
		return getFormatDate(num,stringDate).getTime()/1000;
	}
	
	/**
	 * 返回格日期
	 * @param num
	 * @param stringDate
	 * @return
	 */
	public static Date getFormatDate(int num, String stringDate){
		Date resultDate = null;
		SimpleDateFormat dateformat = getFormat(num);
		try {
			 if(dateformat!=null)
				 resultDate = dateformat.parse(stringDate);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return resultDate;
	}


	public static void main(String[] args) {
		//System.out.println(getWeekOfDate(new Date()));
		//System.out.println(getLastMonthDay());
		//System.out.println(getFirstMonthDay());
		//System.out.println(getDate(getMonthBegin(new Date())));
		//System.out.println(getDate(getMonthEnd(new Date())));
		//System.out.println(getDate(getFirstDayOfWeek(new Date())));
		//System.out.println(getDate(getLastDayOfWeek(new Date())));
		/*List<Date> list = getDayOfWeek(new Date());
		String[] weekDays = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ,"星期日", };
		for (int i = 0; i < list.size(); i++) {
			System.out.println(getDate(list.get(i)));
			System.out.println(weekDays[i]);
		}*/
		
		/*System.out.println(getFormatDate("yyyy-MM-dd","2018-03-05"));
		List<String> listm = getDayListOfMonthorDay(new Date());
		for (int i = 0; i < listm.size(); i++) {
			System.out.println(listm.get(i));
		}*/
		//System.out.println(getFormatDate(2,"2018-09-01"));
		
		System.out.println(new SimpleDateFormat("yyyyMM").format(getFirstDateMonth(new Date(),1)));
		
		
		/*String firstDay =  TimeUtil.getFormatString(2,TimeUtil.getFirstDayOfWeek(getFormatDate(2,"2018-09-01")));
		String lastDay=  TimeUtil.getFormatString(2,TimeUtil.getLastDayOfWeek(getFormatDate(2,"2018-09-01")));
		System.out.println (firstDay);
		System.out.println (lastDay);*/
	}

}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值