package com.qxueyou.scc.base.util; /** * 记录项目管理部分核心的数据库字典信息;基础操作Form * * @author 邓志永 * @since JDK1.6 * @history 2014-11-28 邓志永 新建 */ import java.sql.Timestamp; 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.StringUtils; public class DateUtils { /** * 根据格式获得日期字符串 * * @param sFormat * @return */ public String getDateStr(String sFormat) { Calendar tCal = Calendar.getInstance(); Timestamp ts = new Timestamp(tCal.getTime().getTime()); java.util.Date date = new java.util.Date(ts.getTime()); SimpleDateFormat formatter = new SimpleDateFormat(sFormat, Locale.CHINA); return formatter.format(date); } /** * 根据给定格式获取特定时间的格式化显示 * * @param ts * @param sFormat * @return */ public String getDateFormat(Timestamp ts, String sFormat) { Date date = new Date(ts.getTime()); SimpleDateFormat formatter = new SimpleDateFormat(sFormat, Locale.CHINA); return formatter.format(date); } /** * 格式化日期 * * @param ts * @return */ public String getSDate(Timestamp ts) { Date date = new Date(ts.getTime()); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); return formatter.format(date); } /** * 将String类型的日期转换为时间 * * @param dt * @return */ public Timestamp getTs(String dt) { Date date = java.sql.Date.valueOf(dt); Calendar tCal = Calendar.getInstance(); tCal.setTime(date); return new Timestamp(tCal.getTime().getTime()); } /** * 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10 * * @param dt * @return */ public String getShortDate(String dt) { try { return dt.substring(0, dt.indexOf(' ')); } catch (Exception e) { return dt; } } /** * 取得当前日期时间 * * @return */ public Timestamp getCurrDateTime() { Calendar tCal = Calendar.getInstance(); return new Timestamp(tCal.getTime().getTime()); } /** * 取得当前日期时间 毫秒为0 * * @return */ public static Timestamp getCurrTime() { Calendar tCal = Calendar.getInstance(); tCal.set(Calendar.MILLISECOND, 0); return new Timestamp(tCal.getTime().getTime()); } /** * 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒 * * @param ts * @return */ public String getSDateTime(Timestamp ts) { return getDateFormat(ts, "yyyy-MM-dd HH:mm:ss"); } /* 格式化日期 */ public String getSTime(Timestamp ts) { return getDateFormat(ts, "HH:mm:ss"); } /** * 获取当天的日期 * * @return */ public final static String getToday() { java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis()); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); return formatter.format(ts); } // 根据时间获得随机数 public String getRnd() { Calendar tCal = Calendar.getInstance(); Timestamp ts = new Timestamp(tCal.getTime().getTime()); java.util.Date date = new java.util.Date(ts.getTime()); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddhhmmss", Locale.CHINA); String tmpStr = formatter.format(date) + Math.round(Math.random() * 1000 + 1); return tmpStr; } /** * 计算日期之间的差值 2004-3-25 增加 * * @param dt1 * @param dt2 * @return */ public int dateDiff(Timestamp dt1, Timestamp dt2) { long ldate1 = dt1.getTime(); long ldate2 = dt2.getTime(); return (int) ((ldate2 - ldate1) / (1000 * 60 * 60 * 24)); } /** * 计算分钟 * * @param dt1 * @param dt2 * @return */ public int minuteDiff(Timestamp dt1, Timestamp dt2) { long ldate1 = dt1.getTime(); long ldate2 = dt2.getTime(); return (int) ((ldate2 - ldate1) / (1000 * 60)); } /** * 获取明天的日期 * * @return */ public String getTomorrow() { return getNextDay(getToday()); } /** * 获得当前日期的下一天 * * @param date * @return */ public String getNextDay(String date) { if (StringUtils.isBlank(date)) { return ""; } SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); Calendar calendar = Calendar.getInstance(); try { calendar.setTime(f.parse(date)); } catch (ParseException ex) { return date; } calendar.add(5, 1); return f.format(calendar.getTime()); } /** * LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd */ public static String getTheDay(int num) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); GregorianCalendar gc = new GregorianCalendar(); gc.add(GregorianCalendar.DATE, num); Date theday = gc.getTime(); return sdf.format(theday); } /** * 将日期由String转换为Date类型 * * @param date * @return * @throws ParseException */ public static Date convertStringToDate(String sdate) throws ParseException { String date = sdate; if (StringUtils.isBlank(date)) { date = getToday(); } SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); Date objDate = objDateFormat.parse(date); return objDate; } /** * 将日期由String转换为Date类型 * * @param date * @param format * @return * @throws ParseException */ public static Date convertStringToDate(String sdate, String format) throws ParseException { String date = sdate; SimpleDateFormat objDateFormat = new SimpleDateFormat(format, Locale.CHINA); if (StringUtils.isBlank(date)) { java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis()); date = objDateFormat.format(ts); } Date objDate = objDateFormat.parse(date); return objDate; } /** * 将日期由yyyy年MM月String转换为Date类型 * * @param date * @return * @throws ParseException */ public static Date convertStringToDateCh(String sdate) throws ParseException { String date = sdate; SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA); if (StringUtils.isBlank(date)) { java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis()); date = objDateFormat.format(ts); } Date objDate = objDateFormat.parse(date); return objDate; } /** * 取得指定年月的第一天 * @param year * @param month * @return */ public static String getLastDayOfMonthToString(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE)); return new SimpleDateFormat( "yyyy-MM-dd", Locale.CHINA).format(cal.getTime()); } /** * 取得指定年月的最后一天 * @param year * @param month * @return */ public static String getFirstDayOfMonthToString(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); return new SimpleDateFormat( "yyyy-MM-dd", Locale.CHINA).format(cal.getTime()); } /** * 取得指定年月的第一天 * @param year * @param month * @return */ public static Date getLastDayOfMonthToDate(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE)); return cal.getTime() ; } /** * 取得指定年月的最后一天 * @param year * @param month * @return */ public static Date getFirstDayOfMonthToDate(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); return cal.getTime(); } /** * 得到一段时间内有多少周 * @param startTime * @param endTime * @return */ public static int getWeekCounts(Date startTime,Date endTime){ Calendar c_begin = Calendar.getInstance(); Calendar c_end = Calendar.getInstance(); c_begin.setTime(startTime); c_end.setTime(endTime); int count = 1; while(c_begin.before(c_end)){ if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){ count++; } c_begin.add(Calendar.DAY_OF_YEAR, 1); } return count; } /** * 得到日期的年 * @param date * @return */ public static int getYearInDate(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.YEAR); } /** * 当前时间处于一段时间的第几周 * @param startTime * @param endTime * @return */ public static int getWeekIndex(Date startTime,Date endTime){ Calendar begin = Calendar.getInstance(); Calendar end = Calendar.getInstance(); begin.setTime(startTime); end.setTime(endTime); int count = 1; Calendar now = Calendar.getInstance(); while(begin.before(end)){ if(begin.get(Calendar.YEAR) == now.get(Calendar.YEAR) && begin.get(Calendar.MONTH) == now.get(Calendar.MONTH) && begin.get(Calendar.DAY_OF_MONTH) == now.get(Calendar.DAY_OF_MONTH)){ return count ; } if(begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){ count++; } begin.add(Calendar.DAY_OF_YEAR, 1); } return count; } /** * 指定时间处于一段时间的第几周 * @param startTime * @param endTime * @return */ public static int getSpecifyWeekIndex(Date startTime,Date endTime,Date specifyDate){ Calendar begin = Calendar.getInstance(); Calendar end = Calendar.getInstance(); begin.setTime(startTime); end.setTime(endTime); int count = 1; Calendar specify = Calendar.getInstance(); specify.setTime(specifyDate); while(begin.before(end)){ if(begin.get(Calendar.YEAR) == specify.get(Calendar.YEAR) && begin.get(Calendar.MONTH) == specify.get(Calendar.MONTH) && begin.get(Calendar.DAY_OF_MONTH) == specify.get(Calendar.DAY_OF_MONTH)){ return count ; } if(begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){ count++; } begin.add(Calendar.DAY_OF_YEAR, 1); } return count; } }