阅读背景:

Date工具类_Nightliar的博客

来源:互联网 
package com.common.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;

public class DateUtil {
	public static final String YYYY_MM_DD = "yyyy-MM-dd";
	public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

	private static final long ONE_MINUTE = 60000L;
	private static final long ONE_HOUR = 3600000L;
	private static final long ONE_DAY = 86400000L;
	private static final long ONE_WEEK = 604800000L;

	private static final String ONE_SECOND_AGO = "秒前";
	private static final String ONE_MINUTE_AGO = "分钟前";
	private static final String ONE_HOUR_AGO = "小时前";
	private static final String ONE_DAY_AGO = "天前";
	private static final String ONE_MONTH_AGO = "月前";
	private static final String ONE_YEAR_AGO = "年前";

	// 得到?天前的起始时间  00:00:00
	public static Date getSomeDayStart(Integer t){
		t = (t > 0) ? -t : t;
		Calendar cal = new GregorianCalendar();
		cal.add(Calendar.DATE, t);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}
	
	// 得到?天前的结束时间  23:59:59
	public static Date getSomeDayEnd(Integer t){
		t = (t > 0) ? -t : t;
		Calendar cal = new GregorianCalendar();
		cal.add(Calendar.DATE, t);
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

	/**
	 *
	 * 
	 * @param date 时间
	 * @return yyyy-MM-dd HH:mm:ss格式字符串
	 *
	 */
	public static String getSimpleDatetime(Date date) {
		if (date == null) {
			return "";
		}
		return format(date, YYYY_MM_DD_HH_MM_SS);
	}

	/**
	 * 时间格式化
	 * 
	 * @param date 时间参数
	 * @param pattern 时间格式(eg:yyyy-MM-dd HH:mm:ss)
	 * @return 格式后的字符串
	 *
	 */
	public static String format(Date date, String pattern) {
		return DateFormatUtils.format(date, pattern);
	}

	/**
	 * 字符串转时间
	 * 
	 * @param dateStr 时间字符串
	 * @param pattern 时间字符串格式
	 * @return 日期对象
	 *
	 */
	public static Date parseDate(String dateStr, String pattern) {
		try {
			return DateUtils.parseDate(dateStr, pattern);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}

	public static long getDaySub(Date beginDate, Date endDate) {
		return (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
	}

	/**
	 * 计算剩余天数,结束日期和今日都算
	 * 
	 * @param endTime
	 *
	 */
	public static long getSurplusDay(Date endTime) {
		long day = 0;
		if (endTime == null) {
			return day;
		}
		SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
		String beginStr = format.format(new Date());
		String endStr = format.format(endTime);
		
		try {
			Date beginDay = format.parse(beginStr);
			Date endDay = format.parse(endStr);
			long timeBetween = endDay.getTime() - beginDay.getTime();
			// 已经结束了
			if (timeBetween < 0) {
				day = 0;
			} else {
				day = timeBetween / (24 * 60 * 60 * 1000) + 1;
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return day;
	}

	public static Date addDay(Date date, int days) {
		return DateUtils.addDays(date, days);
	}

	//获取指定时间的0点
	public static String getStartTimeOfDay(Date d) {
		Calendar cal = new GregorianCalendar();
		cal.setTime(d);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		return getSimpleDatetime(cal.getTime());
	}
	
    //获取指定时间的24点
	public static String getEndTimeOfDay(Date d) {
		Calendar cal = new GregorianCalendar();
		cal.setTime(d);
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return getSimpleDatetime(cal.getTime());
	}

	// 获得当前月的天数
	public static int getDayOfMonth() {
		Calendar calendar = Calendar.getInstance(Locale.CHINA);
		int day = calendar.getActualMaximum(Calendar.DATE);
		return day;
	}
	// 获得指定日期的月的天数
	public static int getDayOfMonth(Date d) {
		Calendar calendar = Calendar.getInstance(Locale.CHINA);
		calendar.setTime(d);
		int day = calendar.getActualMaximum(Calendar.DATE);
		return day;
	}

	/**
	 * 将一个时间戳转换成提示性时间字符串,如刚刚,1秒前
	 * 
	 * @param date
	 * @return
	 */
	public static String dateConvertToString(Date date) {
		if (date == null) {
			return "";
		}
		long delta = new Date().getTime() - date.getTime();
		if (delta < 1L * ONE_MINUTE) {
			long seconds = toSeconds(delta);
			return (seconds <= 0 ? 1 : seconds) + ONE_SECOND_AGO;
		}
		if (delta < 45L * ONE_MINUTE) {
			long minutes = toMinutes(delta);
			return (minutes <= 0 ? 1 : minutes) + ONE_MINUTE_AGO;
		}
		if (delta < 24L * ONE_HOUR) {
			long hours = toHours(delta);
			return (hours <= 0 ? 1 : hours) + ONE_HOUR_AGO;
		}
		if (delta < 48L * ONE_HOUR) {
			return "昨天";
		}
		if (delta < 30L * ONE_DAY) {
			long days = toDays(delta);
			return (days <= 0 ? 1 : days) + ONE_DAY_AGO;
		}
		if (delta < 12L * 4L * ONE_WEEK) {
			long months = toMonths(delta);
			return (months <= 0 ? 1 : months) + ONE_MONTH_AGO;
		} else {
			long years = toYears(delta);
			return (years <= 0 ? 1 : years) + ONE_YEAR_AGO;
		}
	}

	public static long toSeconds(long date) {
		return date / 1000L;
	}

	public static long toMinutes(long date) {
		return toSeconds(date) / 60L;
	}

	public static long toHours(long date) {
		return toMinutes(date) / 60L;
	}

	public static long toDays(long date) {
		return toHours(date) / 24L;
	}

	public static long toMonths(long date) {
		return toDays(date) / 30L;
	}

	public static long toYears(long date) {
		return toMonths(date) / 365L;
	}
}
package com.common.util;

import java.text.Pars



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: