时间工具类

日常开发中常用时间转换

package com.somnus.date;

import java.text.DateFormat;
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 org.apache.commons.lang3.time.DateFormatUtils;
import org.junit.Test;

import com.somnus.enums.SnadWeekEnum;

public class DateUtil {
	// 格式:年-月-日 小时:分钟:秒
	public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss";

	// 格式:年-月-日 小时:分钟
	public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm";

	// 格式:年月日
	public static final String FORMAT_THREE = "yyyyMMdd";

	// 格式:年-月-日
	public static final String FORMAT_FOUR = "yyyy-MM-dd";

	// 格式:时分秒
	public static final String FORMAT_FIVE = "HH:mm:ss";
	
	/**
	 * @description yyyy-MM-dd 转换为 yyyyMMdd
	 * @param datestr
	 * @return
	 */
	public static String convert2yyyyMMdd(String datestr){
		return datestr.replaceAll("(\\d{4})-(\\d{2})-(\\d{2})","$1$2$3");
	}
	/**
	 * @description yyyyMMdd 转换为 yyyy-MM-dd
	 * @param datestr
	 * @return
	 */
	public static String convert2yyyy_MM_dd(String datestr){
		return datestr.replaceAll("(\\d{4})(\\d{2})(\\d{2})","$1-$2-$3");
	}
	
	/**
     * 
     * @Description: 将字符串从一种格式转化的
     * @param @param src         日期原串
     * @param @param infmt       日期输入格式
     * @param @param outfmt      日期输出格式
     * @param @return            目标日期字符串  
     * @throws ParseException
     */
    public static String getFmtDateStr(String src,String infmt,String outfmt) throws ParseException {
        //输入格式
        DateFormat informater = new SimpleDateFormat(infmt);
        //输出格式
        DateFormat outfomater = new SimpleDateFormat(outfmt);
        String result = outfomater.format(informater.parse(src));
        return result;
    }

	/**
	 * 把符合日期格式的字符串转换为日期类型
	 * @throws ParseException 
	 */
	public static Date stringtoDate(String dateStr, String format) throws ParseException {
		SimpleDateFormat formater = new SimpleDateFormat(format);
		formater.setLenient(false);
		Date d  = formater.parse(dateStr);
		return d;
	}

	/**
	 * 把日期转换为字符串
	 */
	public static String dateToString(java.util.Date date, String format) {
		SimpleDateFormat formater = new SimpleDateFormat(format);
		String result = formater.format(date);
		return result;
	}

	/**
	 * @param dateKind
	 *            指定处理年、月、日
	 * @param dateStr
	 *            指定日期
	 * @param amount
	 *            指定长度
	 * @return
	 * @throws ParseException 
	 */
	public static String dateSub(int dateKind, String dateStr, int amount) throws ParseException {
		Date date = stringtoDate(dateStr, FORMAT_ONE);
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(dateKind, amount);
		return dateToString(calendar.getTime(), FORMAT_ONE);
	}

	/**
	 * 
	 * @param days
	 * @return 返回一个相加减后的日期 yyyy-MM-dd
	 */
	public static String dateSub(int days) {
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_YEAR, days);
		return dateToString(calendar.getTime(), FORMAT_FOUR);
	}

	/**
	 * 两个日期相减
	 * 
	 * @return 相减得到的秒数
	 * @throws ParseException 
	 */
	public static long timeSub(String firstTime, String secTime) throws ParseException {
		long first = stringtoDate(firstTime, FORMAT_ONE).getTime();
		long second = stringtoDate(secTime, FORMAT_ONE).getTime();
		return (second - first) / 1000;
	}

	/**
	 * 获取某年某月的天数 
	 */
	public static int getDaysOfMonth(int year, int month) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(year, month - 1, 1);
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 返回日期的年
	 */
	public static int getYear(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 返回日期的月份,1-12
	 */
	public static int getMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.MONTH) + 1;
	}

	/**
	 * 返回日期的日1-31
	 */
	public static int getDay(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DATE);
	}

	/**
	 * 返回日期的时
	 */
	public static int getHour(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.HOUR);
	}

	/**
	 * 返回日期的分
	 */
	public static int getMinute(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.MINUTE);
	}

	/**
	 * 返回日期的秒
	 */
	public static int getSecond(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.SECOND);
	}

	/**
	 * 返回日期在一个年中是第几天
	 */
	public static int getDayOfYear(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_YEAR);
	}

	/**
	 * 返回日期在一个月中是第几天
	 */
	public static int getDayOfMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 返回日期在一个周中是第几天
	 */
	public static int getDayOfWeek(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_WEEK) - 1;
	}

	/**
	 * 返回日期在一个月中是第几周
	 */
	public static int getDayOfWeekInMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
	}

	/**
	 * 返回日期在一个年中是第几周
	 */
	public static int getWeekOfYear(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.WEEK_OF_YEAR);
	}
	
	/**
	 * 返回当前日期是星期几
	 * @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];
	}
	
	/**
	 * 返回当前日期是星期几
	 * 0星期日1星期一2星期二3星期三4星期四5星期五6星期六
	 * @param date
	 * @return
	 */
	public static Integer getWeekOfDate2(Date date) {
		Integer[] weekDays = { 0, 1, 2, 3, 4, 5, 6};
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
		if (w < 0){
			w = 0;
		}
		return weekDays[w];
	}
	
	/**
	 * 返回当前日期是星期几
	 * 用org.apache.commons.lang3.time.DateFormatUtils
	 * @param date
	 * @return 返回结果是星期日,星期一,星期二,星期三,星期四,星期五,星期六
	 */
	public static String getWeekOfDate3(Date date) {
		return DateFormatUtils.format(date, "E");
	}
	
	/**
	 * 获取两个日期之间的所有日期
	 * 备注:包含开始和结束时间
	 * @param begin
	 * @param end
	 * @return 
	 */
	public static List<Date> getBetweenDate1(Date begin, Date end) {
        List<Date> result = new ArrayList<Date>();
        //用Calendar 进行日期比较判断
        Calendar calendar = Calendar.getInstance();
	    while(begin.getTime()<=end.getTime()){
	    	// 把日期添加到集合
	    	result.add(begin);
	    	// 设置日期
	    	calendar.setTime(begin);
	    	//把日期增加一天
	    	calendar.add(Calendar.DAY_OF_YEAR, 1);
	    	// 获取增加后的日期
	    	begin = calendar.getTime();
	    }
	    return result;
	}

	 /**
     * 获取两个日期之间的所有日期
     * 备注:包含开始和结束时间
     * @param startTime
     * @param endTime
     * @return
     */
	public static List<String> getBetweenDate2(String startTime, String endTime){
    	// 声明保存日期集合
    	List<String> result = new ArrayList<String>();
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_ONE);
        try {
            // 转化成日期类型
            Date startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);
 
            //用Calendar 进行日期比较判断
            Calendar calendar = Calendar.getInstance();
            while (startDate.getTime()<=endDate.getTime()){
                // 把日期添加到集合
            	result.add(sdf.format(startDate));
                // 设置日期
                calendar.setTime(startDate);
                //把日期增加一天
                calendar.add(Calendar.DATE, 1);
                // 获取增加后的日期
                startDate=calendar.getTime();
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return result;
    }
	
	
	

	/**
	 * 计算两个日期相差的天数,如果date1 > date2 返回正数,否则返回负数
	 */
	public static long dayDiff(Date date1, Date date2) {
		long diff = Math.abs(date1.getTime() - date2.getTime());
		diff /= 3600 * 1000 * 24;
		return diff;
	}

	/**
	 * 比较两个日期的年差
	 * @throws ParseException 
	 */
	public static int yearDiff(String before, String after) throws ParseException {
		Date beforeDay = stringtoDate(before, FORMAT_FOUR);
		Date afterDay = stringtoDate(after, FORMAT_FOUR);
		return getYear(afterDay) - getYear(beforeDay);
	}

	/**
	 * 比较指定日期与当前日期的差
	 * @throws ParseException 
	 */
	public static int yearDiffCurr(String after) throws ParseException {
		return yearDiff(getSysCurrentDate(), after);
	}

	/**
	 * 获取当前时间的指定格式
	 */
	public static String getCurrDate(String format) {
		return dateToString(new Date(), format);
	}
	
	/**
     * @return 当前系统时间 yyyy-MM-dd HH24:MI:SS
     */
    public static String getSysCurrentDateTime(){
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_ONE);
        String time = sdf.format(new java.util.Date());  
        return time;
    }
    
    /**
     * @return 当前系统时间 yyyy-MM-dd
     */
    public static String getSysCurrentDate(){
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_FOUR);  
        String time = sdf.format(new java.util.Date());  
        return time;
    }
    
    /**
     * @return 当前系统时间 HH24:MI:SS
     */
    public static String getSysCurrentTime(){
        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_FIVE);  
        String time = sdf.format(new java.util.Date());  
        return time;
    }


    /**
     * 获取指定时间的毫秒值
     * 备注:
     * new Date().getTime() 
     * 返回:13位的毫秒数,记录1970年1月1日到现在一共经历了多长时间 
     * 注意:13位数字,单位是毫秒;10位数字,单位是秒
     * @param date
     * @return
     */
    public static long getSysCurrentSecond(Date date){
    	//精确到毫秒
    	long time = date.getTime();
    	//精确到秒
    	//long time2=date.getTime()/1000;
    	return time;
    }

    //测试
	public static void main(String[] args) throws ParseException {
		System.out.println("当前时间:" + DateUtil.getCurrDate(FORMAT_ONE));
		System.out.println("当前时间:" + DateUtil.getSysCurrentDate());
		System.out.println("某年某月的最大天数:" + DateUtil.getDaysOfMonth(2011, 5));

		System.out.println("当前日期+2:" + DateUtil.dateSub(2));
		System.out.println("指定日期+2:"
				+ DateUtil.dateSub(Calendar.DAY_OF_YEAR, "2014-01-01 00:00:00",
						2));
		System.out.println("yyyy-MM-dd转换成yyyyMMdd:"
				+ DateUtil.convert2yyyyMMdd("2014-03-08"));
		System.out.println("yyyyMMdd转换成yyyy-MM-dd:"
				+ DateUtil.convert2yyyy_MM_dd("20140308"));

		System.out.println("Date转换为String:"
				+ DateUtil.dateToString(new Date(), FORMAT_ONE));
		System.out.println("String转换为Date:"
				+ DateUtil.stringtoDate("2014-03-07 15:12:27", FORMAT_ONE));

		System.out.println("两个日期相差的天数:"
				+ DateUtil.dayDiff(new Date(), DateUtil.stringtoDate(
						"2014-01-01 00:00:00", FORMAT_ONE)));

		System.out.println("返回日期的年:" + DateUtil.getYear(new Date()));// YEAR
		System.out.println("返回日期的月:" + DateUtil.getMonth(new Date()));// MONTH
		System.out.println("返回日期的日:" + DateUtil.getDay(new Date()));// DATE
		System.out.println("返回日期的时:" + DateUtil.getHour(new Date()));// HOUR
		System.out.println("返回日期的分:" + DateUtil.getMinute(new Date()));// MINUTE
		System.out.println("返回日期的秒:" + DateUtil.getSecond(new Date()));// SECOND

		System.out.println("日期在一个年中是第几天:" + DateUtil.getDayOfYear(new Date()));// WEEK_OF_YEAR
		System.out.println("日期在一个月中是第几天:" + DateUtil.getDayOfMonth(new Date()));// DAY_OF_MONTH
		System.out.println("日期在一个周中是第几天:" + DateUtil.getDayOfWeek(new Date()));// DAY_OF_WEEK
		System.out.println("日期在一个月中是第几周:"
				+ DateUtil.getDayOfWeekInMonth(new Date()));// DAY_OF_WEEK_IN_MONTH
		System.out.println("返回日期在一个年中是第几周:"
				+ DateUtil.getWeekOfYear(new Date()));// WEEK_OF_MONTH

		System.out.println("两个日期的年差:"
				+ DateUtil.yearDiff("2013-01-01", "2014-01-01"));
		System.out
				.println("指定日期与当前日期的差:" + DateUtil.yearDiffCurr("2013-01-01"));
	}
	
	@Test
	public void testAA() throws ParseException{
		String time="2019-01-27 00:00:00";
		Date date = stringtoDate(time,FORMAT_ONE);
		Integer weekOfDate2 = getWeekOfDate2(date);
		System.out.println("weekOfDate2:"+weekOfDate2);
		
		String weekOfDate3 = getWeekOfDate3(date);
		System.out.println("weekOfDate3:"+weekOfDate3);
		Integer code=SnadWeekEnum.getCodeByWeek(weekOfDate3);
		System.out.println("code:"+code);
		
		
		String startTime="2019-01-26 00:00:00";
		String endTime="2019-01-28 23:59:59";
		Date startDate=stringtoDate(startTime,FORMAT_ONE);
		Date endDate=stringtoDate(endTime,FORMAT_ONE);
		List<Date> getBetweenDate1 = getBetweenDate1(startDate, endDate); 
		System.out.println("getBetweenDate1:"+getBetweenDate1.toString());
		
		List<String> getBetweenDate2 = getBetweenDate2(startTime, endTime);
		System.out.println("getBetweenDate2:"+getBetweenDate2.toString());
		
	}
	
	
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值