Java 时间工具类

Java 获取当前时间、之后之前时间以及对时间的格式转换

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 日期时间相关工具 日期格式 日期计算
 *
 */
public class DateUtils {

public static int yyyy_MM_dd = 1;

public static int yyyy_M_d = 2;

public static int yy_MM_dd = 3;

public static int yy_M_d = 4;

public static int yyyy_MM_dd_HH_mm_ss = 5;

public static int yyyy_M_d_H_m_s = 6;

public static int yy_MM_dd_HH_mm_ss = 7;

public static int yy_M_d_H_m_s = 8;

public static int yyyy = 9;

public static int yyyy_MM = 10;

public static int yyyyMMdd = 11;

public static int yyyyMM = 12;

public static int yyyyMMddHHmmss = 13;

public static int yyMMddHH = 14;

// 2010-01-01T00:00:00.0Z
public static int yyyy_MM_dd_T_HH_mm_ss_0Z = 15;

public static int HH_mm_ss = 16;

public static int HH_mm = 17;

public static int MM = 19;

public static int dd = 20;

/**
 * 输入String类型的日期与格式代号,以String类型返回需要的格式
 *
 * @param date String 类型的日期
 * @param i 格式类型 可以这样调用DateTool.yyyy_MM_dd
 * */
public static String getStringDateFormats(String date, int i) throws Exception {
    SimpleDateFormat simpledateformat = new SimpleDateFormat();
    if (date == null || date.length() < 6) {
        return "";
    }
    switch (i) {
    case 1: // '\001'
        simpledateformat.applyPattern("yyyy-MM-dd");
        break;

    case 2: // '\002'
        simpledateformat.applyPattern("yyyy-M-d");
        break;

    case 3: // '\003'
        simpledateformat.applyPattern("yy-MM-dd");
        break;

    case 4: // '\004'
        simpledateformat.applyPattern("yy-M-d");
        break;

    case 5: // '\005'
        simpledateformat.applyPattern("yyyy-MM-dd HH:mm:ss");
        break;

    case 6: // '\006'
        simpledateformat.applyPattern("yyyy-M-d H:m:s");
        break;

    case 7: // '\007'
        simpledateformat.applyPattern("yy-MM-dd HH:mm:ss");
        break;

    case 8: // '\b'
        simpledateformat.applyPattern("yy-M-d H:m:s");
        break;

    case 9: //
        simpledateformat.applyPattern("yyyy");
        break;

    case 10: //
        simpledateformat.applyPattern("yyyy-MM");
        break;

    case 11: //
        simpledateformat.applyPattern("yyyyMMdd");
        break;

    case 12: //
        simpledateformat.applyPattern("yyyyMM");
        break;

    case 13:
        simpledateformat.applyPattern("yyyyMMddHHmmss");
        break;

    case 14:
        simpledateformat.applyPattern("yyMMddHH");
        break;

    case 15: //
        simpledateformat.applyPattern("yyyy-MM-dd'T'HH:mm:ss.0'Z'");
        break;

    case 16: //
        simpledateformat.applyPattern("HH:mm:ss");
        break;
    case 17: //
    	simpledateformat.applyPattern("HH:mm");
    	break;
    case 18: //
    	simpledateformat.applyPattern("yyyyMMddHHmmssSSS");
    	break;
    case 19: //
    	simpledateformat.applyPattern("MM");
    	break;
    case 20: //
    	simpledateformat.applyPattern("dd");
    	break;
    }
    return simpledateformat.format(simpledateformat.parse(date));
}

public static String getStringDateFormat(String date, int inputi, int outputi) {
    try {
        Date input = getDateFormat(date, inputi);
        return getStringDateFormat(input, outputi);
    } catch (Exception e) {
        // e.printStackTrace();
    }
    return "";
}

/**
 * 输入Date类型的日期与格式代号,以String类型返回需要的格式
 *
 * @param calendar Date 类型的日期
 * @param i 格式类型 可以这样调用DateTool.yyyy_MM_dd
 * */

public static String getStringDateFormat(Date calendar, int i) throws Exception {
    SimpleDateFormat simpledateformat = new SimpleDateFormat();
    switch (i) {
    case 1: // '\001'
        simpledateformat.applyPattern("yyyy-MM-dd");
        break;

    case 2: // '\002'
        simpledateformat.applyPattern("yyyy-M-d");
        break;

    case 3: // '\003'
        simpledateformat.applyPattern("yy-MM-dd");
        break;

    case 4: // '\004'
        simpledateformat.applyPattern("yy-M-d");
        break;

    case 5: // '\005'
        simpledateformat.applyPattern("yyyy-MM-dd HH:mm:ss");
        break;

    case 6: // '\006'
        simpledateformat.applyPattern("yyyy-M-d H:m:s");
        break;

    case 7: // '\007'
        simpledateformat.applyPattern("yy-MM-dd HH:mm:ss");
        break;

    case 8: // '\b'
        simpledateformat.applyPattern("yy-M-d H:m:s");
        break;

    case 9: //
        simpledateformat.applyPattern("yyyy");
        break;

    case 10: //
        simpledateformat.applyPattern("yyyy-MM");
        break;

    case 11: //
        simpledateformat.applyPattern("yyyyMMdd");
        break;

    case 12: //
        simpledateformat.applyPattern("yyyyMM");
        break;

    case 13: //
        simpledateformat.applyPattern("yyyyMMddHHmmss");
        break;

    case 14:
        simpledateformat.applyPattern("yyMMddHH");
        break;

    case 15: //
        simpledateformat.applyPattern("yyyy-MM-dd'T'HH:mm:ss.0'Z'");
        break;

    case 16: //
        simpledateformat.applyPattern("HH:mm:ss");
        break;
    case 17: //
    	simpledateformat.applyPattern("HH:mm");
    }
    return simpledateformat.format(calendar);
}

/**
 * 输入String类型的日期与格式代号,以Date类型返回需要的格式
 *
 * @param date String 类型的日期
 * @param i 格式类型 可以这样调用DateTool.yyyy_MM_dd
 * */
public static Date getDateFormat(String date, int i) throws Exception {
    SimpleDateFormat simpledateformat = new SimpleDateFormat();
    switch (i) {
    case 1: // '\001'
        simpledateformat.applyPattern("yyyy-MM-dd");
        break;

    case 2: // '\002'
        simpledateformat.applyPattern("yyyy-M-d");
        break;

    case 3: // '\003'
        simpledateformat.applyPattern("yy-MM-dd");
        break;

    case 4: // '\004'
        simpledateformat.applyPattern("yy-M-d");
        break;

    case 5: // '\005'
        simpledateformat.applyPattern("yyyy-MM-dd HH:mm:ss");
        break;

    case 6: // '\006'
        simpledateformat.applyPattern("yyyy-M-d H:m:s");
        break;

    case 7: // '\007'
        simpledateformat.applyPattern("yy-MM-dd HH:mm:ss");
        break;

    case 8: // '\b'
        simpledateformat.applyPattern("yy-M-d H:m:s");
        break;

    case 9: //
        simpledateformat.applyPattern("yyyy");
        break;

    case 10: //
        simpledateformat.applyPattern("yyyy-MM");
        break;

    case 11: //
        simpledateformat.applyPattern("yyyyMMdd");
        break;

    case 12: //
        simpledateformat.applyPattern("yyyyMM");
        break;

    case 13:
        simpledateformat.applyPattern("yyyyMMdd HH:mm:ss");
        break;

    case 14:
        simpledateformat.applyPattern("yyMMddHH");
        break;

    case 15: //
        simpledateformat.applyPattern("yyyy-MM-dd'T'HH:mm:ss.0'Z'");
        break;

    case 16: //
        simpledateformat.applyPattern("HH:mm:ss");
        break;
    case 17: //
    	simpledateformat.applyPattern("HH:mm");
    	break;
    }
    return simpledateformat.parse(date);
}

/**
 * 输入日期格式代号,以String类型返回需要的格式的当前日期时间
 *
 * @param i 格式类型 可以这样调用DateTool.yyyy_MM_dd
 * */

public static String getNowDate(int i) throws Exception {
    SimpleDateFormat simpledateformat = new SimpleDateFormat();
    switch (i) {
    case 1: // '\001'
        simpledateformat.applyPattern("yyyy-MM-dd");
        break;

    case 2: // '\002'
        simpledateformat.applyPattern("yyyy-M-d");
        break;

    case 3: // '\003'
        simpledateformat.applyPattern("yy-MM-dd");
        break;

    case 4: // '\004'
        simpledateformat.applyPattern("yy-M-d");
        break;

    case 5: // '\005'
        simpledateformat.applyPattern("yyyy-MM-dd HH:mm:ss");
        break;

    case 6: // '\006'
        simpledateformat.applyPattern("yyyy-M-d H:m:s");
        break;

    case 7: // '\007'
        simpledateformat.applyPattern("yy-MM-dd HH:mm:ss");
        break;

    case 8: // '\b'
        simpledateformat.applyPattern("yy-M-d H:m:s");
        break;

    case 9: //
        simpledateformat.applyPattern("yyyy");
        break;

    case 10: //
        simpledateformat.applyPattern("yyyy-MM");
        break;

    case 11: //
        simpledateformat.applyPattern("yyyyMMdd");
        break;

    case 12: //
        simpledateformat.applyPattern("yyyyMM");
        break;

    case 13: //
        simpledateformat.applyPattern("yyyyMMddHHmmss");
        break;

    case 14:
        simpledateformat.applyPattern("yyMMddHH");
        break;

    case 15: //
        simpledateformat.applyPattern("yyyy-MM-dd'T'HH:mm:ss.0'Z'");
        break;

    case 16: //
        simpledateformat.applyPattern("HH:mm:ss");
        break;
    case 17: //
    	simpledateformat.applyPattern("HH:mm");
    case 18: //
        simpledateformat.applyPattern("yyyyMMddHHmmssSSS");
        break;
    case 19: //
        simpledateformat.applyPattern("yyMMdd");
        break;
    }
    return simpledateformat.format(new Date());
}

/**
 *
 * 取得系统当前时间,返回类型为Date
 */

public static Date getNowDate() throws ParseException {
    return new Date();
}

public static Date getTodayDate() throws Exception {
    return getFristTimeOfDate(new Date());
}

/**
 * 日期的计算
 */

/**
 * 取得一天的开始时间
 *
 * @param date
 * @param pattern
 * @return
 * @throws Exception
 */
public static Date getFristTimeOfDate(Date date) throws Exception {
    String s = DateUtils.getStringDateFormat(date, DateUtils.yyyy_MM_dd);
    return DateUtils.getDateFormat(s + " 00:00:00", DateUtils.yyyy_MM_dd_HH_mm_ss);
}

/**
 * 取得一天的最后时间
 *
 * @param date
 * @param pattern
 * @return
 * @throws Exception
 */
public static Date getLastTimeOfDate(Date date) throws Exception {

    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(GregorianCalendar.DATE, 1);
    return getFristTimeOfDate(gc.getTime());
}

/**
 * 取得前N天前或后的时间
 *
 * @param date 日期
 * @param N date的N天 负数为前N天 正数为后N天
 * @throws Exception
 */
public static Date getNDayOfDate(Date date, Integer N) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(GregorianCalendar.DATE, N);
    return gc.getTime();
}

/**
 * 取得N个月前或后
 *
 * @param date
 * @param N
 * @return
 */
public static Date getNMonthOfDate(Date date, Integer N) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(GregorianCalendar.MONTH, N);
    return gc.getTime();
}

/**
 * date1与date2相差的天数 date1 date2
 *
 * @throws Exception
 */
public static long getDays(String date1, String date2) throws Exception {
    long days = 0;
    Date dt1 = DateUtils.getDateFormat(date1, DateUtils.yy_MM_dd);
    Date dt2 = DateUtils.getDateFormat(date2, DateUtils.yy_MM_dd);
    days = dt1.getTime() - dt2.getTime();
    days = days / 1000 / 60 / 60 / 24;
    return days;
}

/**
 * date1与date2相差的天数 date1 date2
 *
 * @throws Exception
 */
public static long getDays(Date date1, Date date2) throws Exception {
    long days = 0;
    days = date1.getTime() - date2.getTime();
    days = days / 1000 / 60 / 60 / 24;
    return days;
}

/**
 * 取得日期对应的星期
 *
 * @param date
 */
public static String getWeekDay(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    int i = c.get(Calendar.DAY_OF_WEEK) - 1;
    String day[] = new String[] { "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
    return day[i];
}

/**
 * 取得日期对应的星期数字
 *
 * @param date
 */
public static int getWeekDayNum(Date date) {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    return c.get(Calendar.DAY_OF_WEEK);
}

/**
 * 取当前时间的秒数
 * */
public static int getSecond() {

    java.util.Calendar c = java.util.Calendar.getInstance();
    c.setTime(new Date());
    return c.get(java.util.Calendar.SECOND);

}

/**
 * 将指定的天数添加到给定的日历字段中。 例: date=2007.12.1 days=2 return 2007.12.3 例:
 * date=2007.12.1 days=-2 return 2007.11.29
 *
 * @param date 指定日期
 * @param days 时间量
 * @return 返回修改后的日期
 */
public static Date addDays(Date date, int days) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(Calendar.DAY_OF_MONTH, days);
    return gc.getTime();
}

/**
 * 将指定的小时数添加到日志
 *
 * @param date 指定日期
 * @param hour 时间量
 * @return 返回修改后的日期
 */
public static Date addHour(Date date, int hour) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(Calendar.HOUR_OF_DAY, hour);
    return gc.getTime();
}

/**
 * 将指定的分钟数添加到日志
 *
 * @param date 指定日期
 * @param hour 时间量
 * @return 返回修改后的日期
 */
public static Date addMinute(Date date, int minute) {
	GregorianCalendar gc = new GregorianCalendar();
	gc.setTime(date);
	gc.add(Calendar.MINUTE, minute);
	return gc.getTime();
}

/**
 * 将指定的天数添加到给定的日历字段中。 例: date=2007.12.1 weeks=2 return 2007.12.15 例:
 * date=2007.12.1 weeks=-2 return 2007.11.17
 *
 * @param date 指定日期
 * @param days 时间量
 * @return 返回修改后的日期
 */
public static Date addWeeks(Date date, int weeks) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(Calendar.WEEK_OF_YEAR, weeks);
    return gc.getTime();
}

/**
 * 将指定的天数添加到给定的日历字段中。 例: date=2007.12.1 months=2 return 2008.02.1 例:
 * date=2007.12.1 months=-2 return 2007.10.30
 *
 * @param date 指定日期
 * @param days 时间量
 * @return 返回修改后的日期
 */
public static Date addMonths(Date date, int months) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(date);
    gc.add(Calendar.MONTH, months);
    return gc.getTime();
}

// 装载当前日期所有的周的所有日期
public static Map<Integer, Date> getWeekMap(Date date) throws Exception {
    // 找出这个更新排班所在的周一
    String searchDay = DateUtils.getStringDateFormat(date, DateUtils.yyyy_MM_dd);
    int searchDateNum = DateUtils.getWeekDayNum(DateUtils.getDateFormat(searchDay, 1));
    if (searchDateNum == 0) {
        searchDateNum = 7;
    }
    Date startDay = DateUtils.getNDayOfDate(DateUtils.getDateFormat(searchDay, 1), -searchDateNum + 1);
    Map<Integer, Date> weekMap = new HashMap<Integer, Date>();
    // 先设置星期一
    weekMap.put(1, startDay);
    for (int i = 1; i <= 7; i++) {
        weekMap.put(i + 1, DateUtils.addDays(startDay, i));
    }
    return weekMap;
}

public static boolean compareDate(Date date1, Date date2) {
    try {
        return ((getDays(getStringDateFormat(date1, yyyy_MM_dd), getStringDateFormat(date2, yyyy_MM_dd))) >= 0);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

/**
 * 取当前时间的时
 * */
public static int getHour() {
    java.util.Calendar c = java.util.Calendar.getInstance();
    c.setTime(new Date());
    return c.get(java.util.Calendar.HOUR_OF_DAY);

}

public static int getMinute() {
    java.util.Calendar c = java.util.Calendar.getInstance();
    c.setTime(new Date());
    return c.get(java.util.Calendar.MINUTE);

}

public static boolean compareHour(Date sDate) {
    java.util.Calendar c = java.util.Calendar.getInstance();
    c.setTime(sDate);
    if (c.get(java.util.Calendar.HOUR_OF_DAY) < getHour())
        return true;
    if (c.get(java.util.Calendar.HOUR_OF_DAY) == getHour() && c.get(java.util.Calendar.MINUTE) < getMinute())
        return true;
    return false;
}

/**
 * 判断字符串是否符合日期格式
 *
 * @param date
 * @return
 */
public static boolean isDate(String date) {
    Pattern p = Pattern.compile("([1][9][4-9][0-9])|([2][0-9][0-9][0-9])-"
            + "(([0]?[0-9])|([1]?[0-2]))-(([0-2]?[0-9])|([3][0-1]))"
            + "[   ](([0-1]?[0-9])|([2]?[0-3])):([0-5]?[0-9]):([0-5]?[0-9])$");
    Matcher m = p.matcher(date);
    boolean b = m.matches();
    return b;
}

/**
 * Title: convertToAge
 * @description: 重载convertToAge方法,传入当前日期,避免同时加载多个患者信息的时候重复查询数据库的当前日期时间
 * @param birthday
 * @param endDate 计算年龄的截至日期
 * @return
 * @author Rasky
 * @date 2015-10-12 下午4:50:09
 */
 public static String convertToAge(Date birthday, Date endDate) {
 	if (birthday == null)
 		return null;
 	if (endDate == null)
 		return null;
	String age = "";
	Calendar now = Calendar.getInstance();
	if(endDate!=null){
		now.setTime(endDate);
	}
	Calendar birthdayCal = (Calendar) now.clone();
	birthdayCal.setTime(birthday);
	int day = now.get(Calendar.DAY_OF_MONTH)
			- birthdayCal.get(Calendar.DAY_OF_MONTH);
	int month = now.get(Calendar.MONTH)
			- birthdayCal.get(Calendar.MONTH);
	int year = now.get(Calendar.YEAR) - birthdayCal.get(Calendar.YEAR);
	// 按照减法原理,先day相减,不够向month借;然后month相减,不够向year借;最后year相减。
	if (day < 0) {
		month -= 1;
		now.add(Calendar.MONTH, -1);// 得到上一个月,用来得到上个月的天数。
		day = day + now.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	if (month < 0) {
		month = (month + 12) % 12;
		year--;
	}
	if (year >= 5) {//=去掉了
		age = year + "岁";
	} else if (year < 1) {
		if (month < 1)
			age = day + "天";
		else
			age = month + "月" + day + "天";
	} else {
		age = year + "岁" + month + "月" + day + "天";
	}
	return age;
}

 public static Tuple2<Integer, String> convertToAgeTuple2(Date birthday, Date endDate) {
	 Tuple2<Integer, String> t2 = new Tuple2<Integer,String>();
  	if (birthday == null)
  		return null;
  	if (endDate == null)
  		return null;
	String age = "";
	Calendar now = Calendar.getInstance();
	if(endDate!=null){
		now.setTime(endDate);
	}
	Calendar birthdayCal = (Calendar) now.clone();
	birthdayCal.setTime(birthday);
	int day = now.get(Calendar.DAY_OF_MONTH)
			- birthdayCal.get(Calendar.DAY_OF_MONTH);
	int month = now.get(Calendar.MONTH)
			- birthdayCal.get(Calendar.MONTH);
	int year = now.get(Calendar.YEAR) - birthdayCal.get(Calendar.YEAR);
	// 按照减法原理,先day相减,不够向month借;然后month相减,不够向year借;最后year相减。
	if (day < 0) {
		month -= 1;
		now.add(Calendar.MONTH, -1);// 得到上一个月,用来得到上个月的天数。
		day = day + now.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	if (month < 0) {
		month = (month + 12) % 12;
		year--;
	}
	/*if (year >= 5) {
		age = year + "岁";
	} else if (year < 1) {
		if (month < 1)
			age = day + "天";
		else
			age = month + "月" + day + "天";
	} else {
		age = year + "岁" + month + "月" + day + "天";
	}*/

	if(year >=1){
		t2.setC1(year);
		t2.setC2("岁");
	}else if(year <1 ){
		if (month < 1){
			t2.setC1(day);
			t2.setC2("天");
		}else{
			t2.setC1(month);
			t2.setC2("月");
		}


	}
	return t2;
}

 /**
  * 获取今年最后一天
  * @return
  */
public static Date getLastDateOfThisYear() {

	Date date = new Date();

	SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-DD");

	String nowDateStr = format.format(date);

	String year = nowDateStr.split("-")[0];

	try {
		return format.parse(year + "-12-30");
	} catch (ParseException e) {
		e.printStackTrace();
		return null;
	}
}

/**
 * 根据日期字符串和日期格式返回时间戳字符串
 * @param dateStr
 * @param format
 * @return
 */
public static String dateStrToStampStr(String dateStr, String format){
	try {
		if(dateStr != null && !"".equals(dateStr) && format != null && !"".equals(format)){
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			Date date = sdf.parse(dateStr);
			Long dateLong = date.getTime() / 1000;
			return dateLong.toString();
		}else{
			return null;
		}
	} catch (ParseException e) {
		e.printStackTrace();
		//logger.warn("根据日期字符串和日期格式返回时间戳字符串", e);
	}
	return null;
}

/**
 * 根据日期对象和日期格式返回时间戳字符串
 * @param dateObj
 * @param format
 * @return
 */
public static String dateObjToStampStr(Date dateObj, String format){
	try{
		if(dateObj != null && format != null && !"".equals(format)){
			SimpleDateFormat sdf = new SimpleDateFormat(format);
    		String dateStr = sdf.format(dateObj);
    		Date date = sdf.parse(dateStr);
    		Long dateLong = date.getTime() / 1000;
    		return dateLong.toString();
		}else{
			return null;
		}
	}catch(Exception e){
		e.printStackTrace();
		//logger.warn("根据日期对象和日期格式返回时间戳字符串", e);
	}
	return null;
}
}

以上是本人根据工作需求书写的时间工具类,希望对大家有帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值