日期工具类
来源:互联网 发布:公司网络网络架构图 编辑:程序博客网 时间:2024/06/07 11:21
import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Collections;import java.util.Date;import java.util.GregorianCalendar;import java.util.List;import java.util.Locale;import net.sf.json.JSONObject;import org.apache.log4j.Logger;/** * * 区分 责任人 日期 说明<br/> * <p> * 时间工具类 * <p> * @author * * */public class DateUtils { private static Logger log = Logger.getLogger(DateUtils.class); /**当前毫秒值*/ public static long NOW_DATE_MIS =getNowTime(); /**根据方法获取**/ public static long getNowTime(){ return new Date().getTime(); } /** * 获取当前时间的年月日时分秒+时间戳后4位 如:20140620123456 18位 * @return */ public static String ymdhms4(){ Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String s = sdf.format(date); double a = Math.random() * 9000 + 1000; int result = (int)a; return s + result; } /** * 把一个字符串时间转换为毫秒值 如 2014-12-12 12:12:12 转换为 1406086513619 * @param strDate * @return */ public static long str2DateTime(String strDate){ SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); Date date = new Date(); try { date = df.parse(strDate); } catch (ParseException pe) { pe.getStackTrace(); } return date.getTime() ; } /** * 把一个日期转换为指定的格式 */ public static Date str2Date(String strDate, String formater) { if (strDate == null) { return null; } if (formater == null) { formater = "yyyy-MM-dd"; } SimpleDateFormat df = new SimpleDateFormat(formater); Date date = new Date(); try { date = df.parse(strDate); } catch (ParseException pe) { pe.getStackTrace(); } return date; } /** * 获取最大毫秒值 * @param dateStr 2014-12-12 年-月-日 参数 * @return */ public static Long getMaxMillsByYMD(String dateStr){ if(StringUtils.isBlank(dateStr)){ log.error("getTodayMaxMills error , message :param is empty"); return null; } dateStr = dateStr.trim() + " 23:59:59"; Date date = ymdHmsStr2Date(dateStr); return date.getTime() ; } /** * 获取最小毫秒值 * @param dateStr 2014-12-12 年月日参数 * @return */ public static Long getMinxMillsByYMD(String dateStr){ if(StringUtils.isBlank(dateStr)){ log.error("getTodayMaxMills error , message :param is empty"); return null; } dateStr = dateStr.trim() + " 00:00:00"; Date date = ymdHmsStr2Date(dateStr); return date.getTime() ; } public static String getNextMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 return formaterDate(c.getTime(), "yyyy-MM"); } public static String getPreviousMonth() { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, -1);// 减一个月,变为上月的1号 return formaterDate(c.getTime(), "yyyy-MM"); } public static String getMonth(String date,int num) { Calendar c = Calendar.getInstance(); if(StringUtils.isNotEmpty(date)){ c.setTime(DateUtils.ymdStr2Date(date)); } c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, num);// 减一个月,变为上月的1号 return formaterDate(c.getTime(), "yyyy-MM-dd"); } /** * 计算两个日期之间相差的月数 * @param date1 * @param date2 * @return */ public static int getMonths(Date date1, Date date2) { int iMonth = 0; int flag = 0; try { Calendar objCalendarDate1 = Calendar.getInstance(); objCalendarDate1.setTime(date1); Calendar objCalendarDate2 = Calendar.getInstance(); objCalendarDate2.setTime(date2); if (objCalendarDate2.equals(objCalendarDate1)) return 0; if (objCalendarDate1.after(objCalendarDate2)) { Calendar temp = objCalendarDate1; objCalendarDate1 = objCalendarDate2; objCalendarDate2 = temp; } if (objCalendarDate2.get(Calendar.DAY_OF_MONTH) < objCalendarDate1 .get(Calendar.DAY_OF_MONTH)) flag = 1; if (objCalendarDate2.get(Calendar.YEAR) > objCalendarDate1 .get(Calendar.YEAR)) iMonth = ((objCalendarDate2.get(Calendar.YEAR) - objCalendarDate1 .get(Calendar.YEAR)) * 12 + objCalendarDate2.get(Calendar.MONTH) - flag) - objCalendarDate1.get(Calendar.MONTH); else iMonth = objCalendarDate2.get(Calendar.MONTH) - objCalendarDate1.get(Calendar.MONTH) - flag; } catch (Exception e) { e.printStackTrace(); } return iMonth; } @SuppressWarnings("unchecked") public static List getMonthList(String startDate,String endDate){ if(StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) { return new ArrayList(); } List<String> dateList = new ArrayList<String>(); //得到两个日期之间有多少月 int num = getMonths(ymdStr2Date(startDate),ymdStr2Date(endDate)); Calendar c = Calendar.getInstance(); c.setTime(DateUtils.ymdStr2Date(startDate)); dateList.add(formaterDate(c.getTime(), "yyyy-MM")); for(int i=0; i<num; i++){ c.set(Calendar.DATE, 1); c.add(Calendar.MONTH, 1); dateList.add(formaterDate(c.getTime(), "yyyy-MM")); } return dateList; } /** * 获取当前星期(中国, 如:星期日,星期一,星期二) */ public static String cnWeek() { Calendar c = GregorianCalendar.getInstance(); c.setFirstDayOfWeek(Calendar.SUNDAY); String[] s = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; return s[c.get(Calendar.DAY_OF_WEEK) - 1]; } /** * 得到当前日期 再加上你指定的天数 所得到的新日期 * @param days * @return */ public static Date getNewDayNumDate(int days){ String today = getToday(); String newDay = getNewDayNumDate(today,days); return ymdStr2Date(newDay); } // 计算当月最后一天,返回字符串 public static String getMonthLastDay() { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 1);// 设为当前月的1号 c.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 c.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天 return ymd(c.getTime()); } // 计算当月第一天,返回字符串 public static String getMonthFirstDay() { Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, 1);// 设为当前月的1号 return ymd(c.getTime()); } /** * 获得前十天时间 * * @param date * @return */ public static String getPrevTenDay(int day) { Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) - day); return ymdHms(c.getTime()); } /** * 得到一个日期是周几 */ public static String getWeekCS(Date date) { Calendar c = GregorianCalendar.getInstance(); c.setTime(date); c.setFirstDayOfWeek(Calendar.SUNDAY); String[] s = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" }; return s[c.get(Calendar.DAY_OF_WEEK) - 1]; } /** * 得到一个日期是周几 */ public static String getWeekInNum(Date date) { Calendar c = GregorianCalendar.getInstance(); c.setTime(date); int weekDayNum = c.get(Calendar.DAY_OF_WEEK)-1; if(weekDayNum == 0){ weekDayNum = 7; } return String.valueOf(weekDayNum); } /** * 取传入时间的小时值 * @param endDate * @return */ public static String makeHour(Date endDate) { String hour = ""; if (endDate != null) { DateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); String after = format.format(endDate); hour = after.substring(11, 13); } return hour; } public static String makeMini(Date endDate) { String mini = ""; if (endDate != null) { DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String after = format.format(endDate); mini = after.substring(14, 16); } return mini; } /** * 得到当前时间的 小时和分(hh:mm) * @param date * @return */ public static String getHourAndMinute(Date date){ String hour = makeHour(date); String minute = makeMini(date); return hour + ":" + minute; } @SuppressWarnings("unchecked") public static List getTomorrowList() { List<String> dateList = new ArrayList<String>(); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String tomorrow = sdf.format(calendar.getTime()); dateList.add(tomorrow); for (int i = 0; i < 6; i++) { calendar.set(6, calendar.get(6) + 1); tomorrow = sdf.format(calendar.getTime()); dateList.add(tomorrow); } return dateList; } public static String getWeekStartDateString(String startDate) { return getWeekDateString(startDate, 0); } public static String getWeekEndDateString(String endDate) { return getWeekDateString(endDate, 6); } public static String getWeekDateString(String currentDate, int day) { // 日历 Calendar calendar = new GregorianCalendar(); // 设置日历为当前时间 calendar.setTime(ymdStr2Date(currentDate)); // 得到今天是周几 int dayofweek = calendar.get(Calendar.DAY_OF_WEEK); int weekofYear = calendar.get(Calendar.WEEK_OF_YEAR); // 加入不是周日,设置日期到下一周 if (dayofweek == 1) { calendar.set(Calendar.WEEK_OF_YEAR, weekofYear - 1); } int nextWeekDay = calendar.get(Calendar.DATE); // 设置日历为下周第一天,+2是下周从星期一开始,星期一是每周的第2天 calendar.set(Calendar.DATE, nextWeekDay - dayofweek + 2); calendar.add(Calendar.DATE, day); return ymd(calendar.getTime()); } public static Date[] getWeekStartAndEndDate(Date currentDate, int start) { // 将要返回的日期 Date[] days = new Date[2]; if(null != currentDate){ // 日历 Calendar calendar = new GregorianCalendar(); // 设置日历为当前时间 calendar.setTime(currentDate); // 得到今天是周几 int dayofweek = calendar.get(Calendar.DAY_OF_WEEK); int weekofYear = calendar.get(Calendar.WEEK_OF_YEAR); // 加入不是周日,设置日期到下一周 if (dayofweek == 1) { calendar.set(Calendar.WEEK_OF_YEAR, weekofYear - 1); } // 得到当前是全年的第几周 int nextWeekDay = calendar.get(Calendar.DATE); // 设置日历为下周第一天,+5是下周从星期四开始,星期四是每周的第5天 calendar.set(Calendar.DATE, nextWeekDay - dayofweek + 2); calendar.add(Calendar.DATE, start); days[0] = calendar.getTime(); days[0] = ymdHmsStr2Date(ymd(days[0]) + " 00:00:00"); calendar.add(Calendar.DATE, 6); days[1] = calendar.getTime(); days[1] = ymdHmsStr2Date(ymd(days[1]) + " 23:59:59"); } return days; } public static String[] getWeekStartAndEndDate(String currentDate, int start) { // 将要返回的日期 String[] days = new String[2]; if(StringUtils.isEmpty(currentDate)){ return days; } // 日历 Calendar calendar = new GregorianCalendar(); // 设置日历为当前时间 calendar.setTime(ymdStr2Date(currentDate)); // 得到今天是周几 int dayofweek = calendar.get(Calendar.DAY_OF_WEEK); int weekofYear = calendar.get(Calendar.WEEK_OF_YEAR); // 加入不是周日,设置日期到下一周 if (dayofweek == 1) { if(weekofYear == 1){ weekofYear = 53; } calendar.set(Calendar.WEEK_OF_YEAR, weekofYear - 1); } // 得到当前是全年的第几周 int nextWeekDay = calendar.get(Calendar.DATE); calendar.set(Calendar.DATE, nextWeekDay - dayofweek + 2); calendar.add(Calendar.DATE, start); days[0] = ymd(calendar.getTime()); calendar.add(Calendar.DATE, 6); days[1] = ymd(calendar.getTime()); return days; } public static String[] getThisWeekStartEndDays() { return getWeekStartAndEndDate(ymd(new Date()), 0); } public static String[] getLastWeekStartEndDays() { return getWeekStartAndEndDate(ymd(new Date()), -7); } public static String[] getNextWeekStartEndDays() { return getWeekStartAndEndDate(ymd(new Date()), 7); } @SuppressWarnings("unchecked") public static List getWeekDateList(String date) throws ParseException { List<String> dateList = new ArrayList<String>(); Calendar calendar = Calendar.getInstance(); SimpleDateFormat ymd = new SimpleDateFormat("yyyy-MM-dd"); Date dateVar = ymd.parse(date); calendar.setTime(dateVar); dateList.add(date); for (int i = 1; i <= 6; i++) { calendar.set(6, calendar.get(6) + 1); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String tomorrow = sdf.format(calendar.getTime()); dateList.add(tomorrow); } return dateList; } public static String getNextDay(String currentDate) { Date d = ymdStr2Date(currentDate); Calendar c = Calendar.getInstance(); c.setTime(d); c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR) + 1); return ymd(c.getTime()); } /** * 获得开始时间和结束时间之间的时间列表 * @param startDate * @param endDate * @return List<String> * @throws ParseException */ @SuppressWarnings("unchecked") public static List getDateList(String startDate, String endDate) throws ParseException { List<String> dateList = new ArrayList<String>(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); // 设定格式 Date start = dateFormat.parse(startDate); Date end = dateFormat.parse(endDate); long day = ((end.getTime() - start.getTime()) / 1000);// 秒数 day = day / (60 * 60 * 24); // 天数 for (int i = 0; i <= day; i++) { String date = getAfterSomeDayYms(startDate, i); dateList.add(date); } return dateList; } /** * 判断所给时间在月的第几周 * @param date 输入时间 * @return 第几周 */ public static int weekOfMonth(String date) { Date d = ymdStr2Date(date); Calendar c = Calendar.getInstance(); c.setTime(d); return c.get(Calendar.WEEK_OF_MONTH); } /** * 获取当前星期几 */ public static int weekDay(String date) { Date d = ymdStr2Date(date); Calendar c = Calendar.getInstance(); c.setTime(d); c.setFirstDayOfWeek(Calendar.SUNDAY); return c.get(Calendar.DAY_OF_WEEK)-1; } /** * 返回日期date 前推beforHour小时后的 日期 * @param date * @param beforHour * @return */ public static Date getBeforHourDate(Date date, int beforHour){ if(date != null){ Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR, c.get(Calendar.HOUR)-beforHour); return c.getTime(); } return null; } /** * 取给定日期的前一天 * @param date * @return */ public static Date getLastDay(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 1); return calendar.getTime(); } /** * 返回两时间的相差天数 * @param d1 * @param d2 * @return */ public static int getDayNumBetween2Date(Date d1, Date d2){ if(isEqualsInYMD(d1, d2)){ return 0; } long l = d2.getTime()-d1.getTime(); int day = (int) (l/(24*60*60*1000)); if(day < 0){ day = (-day); } int m = (int) (l%(24*60*60*1000)); Calendar c = Calendar.getInstance(); if(d1.compareTo(d2)<=0){ c.setTime(d1); c.add(Calendar.MILLISECOND, m); if(isEqualsInYMD(d1, c.getTime())){ return day; }else{ return day+1; } }else{ c.setTime(d2); c.add(Calendar.MILLISECOND, m); if(isEqualsInYMD(d2, c.getTime())){ return day; }else{ return day+1; } } } /** * 两个时间是否是 同年 同月 同日 * 如果是,则返回true,否则返回false * @param d1 * @param d2 * @return */ public static boolean isEqualsInYMD(Date d1, Date d2){ Calendar c = Calendar.getInstance(); c.setTime(d1); int year1 = c.get(Calendar.YEAR); int dayOfYear1 = c.get(Calendar.DAY_OF_YEAR); c.setTime(d2); int year2 = c.get(Calendar.YEAR); int dayOfYear2 = c.get(Calendar.DAY_OF_YEAR); if(year1 != year2){ return false; } if(dayOfYear1 != dayOfYear2){ return false; } return true; } /** * 获得当前月的前 i 个月 * @param i (henrry) * return 月的数组 */ public static String[] getMonthArr(int i){ String arr[] = new String[i]; Calendar c = Calendar.getInstance(); int temp = 0; int tempp = 0; int year = 0; int month = 0; int m = i-1; for(int j=0;j<m;j++){ if(i>12){ temp = (i-1)/12; tempp = (i-1)%12; year = c.get(Calendar.YEAR)-temp; month = c.get(Calendar.MONTH)-tempp+1; if(month<10 && month >0){ arr[j] = year+"-0"+month; }else if(month<0){ month = 12+month; if(month<10){ arr[j] = (year-1)+"-0"+month; }else{ arr[j] = (year-1)+"-"+month; } }else if(month == 0){ arr[j] = (year-1)+"-"+12; }else{ arr[j] = year+"-"+month; } }else{ year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH)-i+2; if(month<10 && month >0){ arr[j] = year+"-0"+month; }else if(month<0){ month = 12+month; if(month<10){ arr[j] = (year-1)+"-0"+month; }else{ arr[j] = (year-1)+"-"+month; } }else if(month==0){ arr[j] = (year-1)+"-"+12; }else{ arr[j] = year+"-"+month; } } i--; } int monthNow = c.get(Calendar.MONTH); if(monthNow>8){ arr[m] = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH)+1); }else{ arr[m] = c.get(Calendar.YEAR) + "-0" + (c.get(Calendar.MONTH)+1); } return arr; } /** * 得到两个时间之间的差距,根据type可返回分别以天,时,分为单位的整数 * @param d1 * @param d2 * @param type * @return */ public static int getBetweenDateGap(Date d1, Date d2, String type){ long time1 = d1.getTime(); long time2 = d2.getTime(); long m = (time1-time2)/1000; int nDay = (int)m/(24*60*60); int nHour = (int)(m-nDay*24*60*60)/(60*60); int nMinute = (int)(m-nDay*24*60*60-nHour*60*60)/60; int mSecond = (int)(m-nDay*24*60*60-nHour*60*60); if("day".equals(type)){ return nDay; }else if("minute".equals(type)){ return nMinute; }else if("hour".equals(type)){ return nHour; }else if("second".equals(type)){ return mSecond; } return nMinute; } /** * * * 通过月份计算季度 * * @param * month * * @return */ public static int getQuarter(int month) { if (month < 1 || month > 12) { throw new IllegalArgumentException("month is invalid."); } return (month - 1) / 3 + 1; }}
阅读全文
0 0
- 工具类-日期工具类
- 日期工具类
- 日期工具类
- 日期工具类
- java日期工具类
- 日期工具类
- 日期工具类
- 一个日期工具类
- 日期工具类
- java日期工具类
- flex 日期工具类
- 工具类:日期处理
- java 日期工具类
- 日期工具类
- 日期工具类DataTool
- Java日期工具类
- 日期工具类TimeUnit
- DateTool日期工具类
- python manage.py makemigrations 和python manage.py migrate
- Ajax4
- 视频开发(三) FFmpeg相关结构体
- 简单的SSS整合(Sping,SpringMVC,SpringData)+redis缓存服务配置+logback日志
- App图标不显示:Xcode项目在Xcode9中运行会出现AppIcon不显示的 BUG
- 日期工具类
- mac 安装nginx 配置识别php文件
- Android客制化------开机拷贝文件到内置存储
- 内部使用的解析require
- 什么是闭包?
- VCSA从6.0升级至6.0 U2
- Discuz!执行注册操作系列函数
- 简单实现jdbc连接数据库工具类
- 背景、颜色、图片样式