Java日期处理

import java.sql.Time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class DateUtils {

	public static final int MSEC_PRE_SECOND = 1000;
	public static final int MSEC_PRE_MINUTE = MSEC_PRE_SECOND * 60;
	public static final int MSEC_PRE_HOUR = MSEC_PRE_MINUTE * 60;
	public static final int MSEC_PRE_DAY = MSEC_PRE_HOUR * 24;

	public static final String FORMAT_DATETIME = "yyyy-MM-dd HH:mm:ss";
	public static final String FORMAT_DATETIME_ZH = "yyyy年MM月dd日 HH时mm分ss秒";
	public static final String FORMAT_DATE = "yyyy-MM-dd";
	public static final String FORMAT_DATE_ZH = "yyyy年MM月dd日";
	public static final String FORMAT_TIME = "HH:mm:ss";
	public static final String FORMAT_TIME_ZH = "HH时mm分ss秒";
	public static final String FORMAT_DAY = "E";

	public static Date getDatetime(String datestr) throws ParseException {
		return getDatetime(datestr, FORMAT_DATETIME);
	}

	/**
	 * 把日期字符串包装成java.util.Date
	 * 
	 * @param datestr
	 * @param format
	 * @return
	 * @throws ParseException
	 */
	public static Date getDatetime(String datestr, String format)
			throws ParseException {
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		return formatter.parse(datestr);
	}

	public static java.sql.Date getDate(String datestr) throws ParseException {
		return getDate(datestr, FORMAT_DATE);
	}

	/**
	 * 把日期字符串包装成java.sql.Date
	 * 
	 * @param datestr
	 * @param format
	 * @return
	 * @throws ParseException
	 */
	public static java.sql.Date getDate(String datestr, String format)
			throws ParseException {
		return new java.sql.Date(getDatetime(datestr, format).getTime());
	}

	public static Time getTime(String datestr) throws ParseException {
		return getTime(datestr, FORMAT_TIME);
	}

	/**
	 * 把日期字符串包装成java.sql.Time
	 * 
	 * @param datestr
	 * @param format
	 * @return
	 */
	public static Time getTime(String datestr, String format)
			throws ParseException {
		return new Time(getDatetime(datestr, format).getTime());
	}

	public static String formatDatetime(Date... date) {
		return formatDate(FORMAT_DATETIME, date);
	}

	public static String formatDate(Date... date) {
		return formatDate(FORMAT_DATE, date);
	}

	public static String formatTime(Date... date) {
		return formatDate(FORMAT_TIME, date);
	}

	public static String formatDay(Date... date) {
		return formatDate(FORMAT_DAY, date);
	}

	public static String formatDate(String datestr, String srcformat,
			String descformat) throws ParseException {
		return formatDate(descformat, getDatetime(datestr, srcformat));
	}

	/**
	 * 格式化日期时间
	 * 
	 * @param format
	 * @param date
	 * @return
	 */
	public static String formatDate(String format, Date... date) {
		SimpleDateFormat formatter = new SimpleDateFormat(format);
		return formatter.format(date.length == 1 ? date[0] : new Date());
	}

	public static Date nextDate(Date... date) {
		return nextDate(1, date);
	}

	/**
	 * 计算某个日期相隔几天后的日期
	 * 
	 * @param interval
	 * @param date
	 * @return
	 */
	public static Date nextDate(int interval, Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		calendar.add(Calendar.DATE, interval);
		return new Date(calendar.getTimeInMillis());
	}

	public static long intervalDays(String datestr, boolean... strict)
			throws ParseException {
		return intervalDays(strict.length == 1 ? strict[0] : false, getDatetime(datestr));
	}

	public static long intervalDays(String datestr, String refdatestr,
			boolean... strict) throws ParseException {
		return intervalDays(datestr, refdatestr, FORMAT_DATETIME, strict);
	}

	public static long intervalDays(String datestr, String refdatestr,
			String format, boolean... strict) throws ParseException {
		return intervalDays(strict.length == 1 ? strict[0] : false, getDatetime(datestr, format), getDatetime(refdatestr, format));
	}

	public static long intervalDays(Date... date) {
		return intervalDays(false, date);
	}

	/**
	 * 计算某个日期和参考日期之间相隔的天数
	 * 
	 * @param strict
	 *            是否严格区分时分秒
	 * @param date
	 * @return
	 */
	public static long intervalDays(boolean strict, Date... date) {
		long datetime = date[0].getTime();
		long reftime = date.length == 2 ? date[1].getTime() : new Date()
				.getTime();
		if (strict) {
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date[0]);
			Map<Integer, Integer> values = new HashMap<Integer, Integer>();
			values.put(Calendar.HOUR, 0);
			values.put(Calendar.MINUTE, 0);
			values.put(Calendar.SECOND, 0);
			values.put(Calendar.MILLISECOND, 0);
			calendar = getCalendar(values, calendar);
			datetime = calendar.getTimeInMillis();
			calendar.setTime(date.length == 2 ? date[1] : new Date());
			calendar = getCalendar(values, calendar);
			reftime = calendar.getTimeInMillis();
		}
		return (reftime - datetime) / MSEC_PRE_DAY;
	}

	public static Date firstDate(String datestr) throws ParseException {
		return firstDate(datestr, FORMAT_DATETIME);
	}

	public static Date firstDate(String datestr, String format)
			throws ParseException {
		return firstDate(getDatetime(datestr, format));
	}

	/**
	 * 获取某个月的第一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date firstDate(Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
		return new Date(calendar.getTimeInMillis());
	}

	public static Date lastDate(String datestr) throws ParseException {
		return lastDate(datestr, FORMAT_DATETIME);
	}

	public static Date lastDate(String datestr, String format)
			throws ParseException {
		return lastDate(getDatetime(datestr, format));
	}

	/**
	 * 获取某个月的最后一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date lastDate(Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		return new Date(calendar.getTimeInMillis());
	}

	public static int getDays(String datestr) throws ParseException {
		return getDays(datestr, FORMAT_DATETIME);
	}

	public static int getDays(String datestr, String format)
			throws ParseException {
		return getDays(getDatetime(datestr, format));
	}

	/**
	 * 获取某个月的天数
	 * 
	 * @param date
	 * @return
	 */
	public static int getDays(Date... date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date.length == 1 ? date[0] : new Date());
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 设置java.util.Calendar
	 * 
	 * @param values
	 * @param calendar
	 * @return
	 */
	public static Calendar getCalendar(Map<Integer, Integer> values,
			Calendar... calendar) {
		Calendar cal = calendar.length == 1 ? calendar[0] : Calendar.getInstance();
		for (Integer key : values.keySet()) {
			cal.set(key, values.get(key));
		}
		return cal;
	}

	/**
	 * 剩余天时分秒
	 * 
	 * @param date
	 * @return
	 */
	public static Map<Integer, Integer> leftTime(Date... date) {
		Date datetime = date[0];
		Date reftime = date.length == 2 ? date[1] : new Date();
		long msec = reftime.getTime() - datetime.getTime();
		long days = msec / MSEC_PRE_DAY;
		long hours = msec % MSEC_PRE_DAY / MSEC_PRE_HOUR;
		long minutes = msec % MSEC_PRE_DAY % MSEC_PRE_HOUR / MSEC_PRE_MINUTE;
		long seconds = msec % MSEC_PRE_DAY % MSEC_PRE_HOUR % MSEC_PRE_MINUTE / MSEC_PRE_SECOND;
		Map<Integer, Integer> values = new HashMap<Integer, Integer>();
		values.put(Calendar.DAY_OF_MONTH, (int) days);
		values.put(Calendar.HOUR, (int) hours);
		values.put(Calendar.MINUTE, (int) minutes);
		values.put(Calendar.SECOND, (int) seconds);
		return values;
	}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值