日期处理工具类
发布时间:2020-12-15 08:22:53 所属栏目:Java 来源:网络整理
导读:import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.* ; /** * 类名:DateUtil br / * p * 功能: * 创建时间:2015年12月4日 下午4:44:11 br / * @version 2015年12月4日 */ public c
import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.*; /** * 类名:DateUtil <br /> * <p> * 功能: * 创建时间:2015年12月4日 下午4:44:11 <br /> * @version 2015年12月4日 */ public class DateUtil { // 缓存 private static final Map<String,SimpleDateFormat> formats; static { formats = new HashMap<String,SimpleDateFormat>(); formats.put("yyyyMMdd",new SimpleDateFormat("yyyyMMdd")); formats.put("HHmmss",new SimpleDateFormat("HHmmss")); formats.put("yyyyMMddHHmmss",new SimpleDateFormat("yyyyMMddHHmmss")); formats.put("yyyyMMddHHmmssSSS",new SimpleDateFormat("yyyyMMddHHmmssSSS")); } /** * 功能:比较两个日期的顺序 <br/> * * @version 2013-12-28 上午11:20:58 <br/> */ public static int compare(Date one,Date two) { return one.compareTo(two); } /** * 功能: <br/> * * @version 2013-12-4 下午02:06:59 <br/> */ public static Date addDays(Date date,int field) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_MONTH,field); return c.getTime(); } /** * 功能: <br/> * * @version 2013-12-4 下午02:06:59 <br/> */ public static Date addHours(Date date,int field) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.HOUR,field); return c.getTime(); } /** * 功能: <br/> * @version 2013-12-4 下午02:06:59 <br/> */ public static Date add(Date date,int field,int amount) { return add(date,field,amount,null); } /** * 功能: <br/> * field like Calendar.SECOND * * @version 2013-12-4 下午02:06:19 <br/> */ public static Date add(Date date,int amount,TimeZone timeZone) { Calendar cal = (timeZone == null ? Calendar.getInstance() : Calendar.getInstance(timeZone)); cal.setTime(date); cal.add(field,amount); return cal.getTime(); } /** * 功能: <br/> * @version 2013-11-27 上午10:01:13 <br/> */ public static Date parseDateTime(String source) throws ParseException { return parse(source,"yyyyMMddHHmmss"); } /** * 功能: <br/> * * @version 2013-11-27 上午10:01:28 <br/> */ public static Date parseTime(String source) throws ParseException { return parse(source,"HHmmss"); } /** * 功能: <br/> * * @throws ParseException * @version 2013-11-27 上午10:00:50 <br/> */ public static Date parseDate(String source) throws ParseException { return parse(source,"yyyyMMdd"); } /** * 功能: <br/> * * @version 2013-11-27 上午10:00:17 <br/> */ public static Date parse(String source,String pattern) throws ParseException { return getFormat(pattern).parse(source); } /** * 功能:获取获取毫秒值得时间戳 + 0-9 随机数一位 <br/> * * @version 2013-11-26 下午07:58:17 <br/> */ public static String getRandomCurrentTimeStamp() { return formaCurrentTimeStamp(new Date()) + new Random().nextInt(9); } /** * 功能:获取秒值得时间戳 <br/> * * @version 2013-11-26 下午07:58:17 <br/> */ public static String getTimeStamp() { return formatDateTime(new Date()); } /** * 功能: 获取毫秒值得时间戳 <br/> * * @version 2013-11-26 下午07:58:17 <br/> */ public static String getCurrentTimeStamp() { return formaCurrentTimeStamp(new Date()); } /** * 功能: <br/> * @version 2013-11-26 下午07:58:17 <br/> */ public static String formaCurrentTimeStamp(Date date) { return format(date,"yyyyMMddHHmmssSSS"); } /** * 功能: <br/> * * @version 2013-11-26 下午07:58:17 <br/> */ public static String formatDateTime(Date date) { return format(date,"yyyyMMddHHmmss"); } /** * 功能:按默认规则格式化为时间 * @version 2013-11-26 下午07:57:33 <br/> */ public static String formatTime(Date date) { return format(date,"HHmmss"); } /** * 功能:按默认规则格式化日期 <br/> * * @version 2013-11-26 下午07:56:47 <br/> */ public static String formatDate(Date date) { return format(date,"yyyyMMdd"); } /** * 功能: <br/> * * @version 2013-11-26 下午07:55:49 <br/> */ public static String format(Date date,String pattern) { return getFormat(pattern).format(date); } /** * 功能: <br/> * * @version 2013-11-27 上午09:59:37 <br/> */ private static SimpleDateFormat getFormat(String pattern) { SimpleDateFormat sdf = formats.get(pattern); if (null == sdf) { formats.put(pattern,sdf = new SimpleDateFormat(pattern)); } // 强制格式匹配 sdf.setLenient(false); return sdf; } /** * 将短时间格式时间转换为字符串 yyyy-MM-dd * * @param dateDate * @return */ public static String dateToStr(Date dateDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String dateString = formatter.format(dateDate); return dateString; } /** * 将短时间格式字符串转换为时间 yyyy-MM-dd * * @param strDate * @return */ public static Date strToDate(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate,pos); return strtodate; } //判断某个时间是否在当前时间的7天之内 public static Boolean isLatestWeek(Date addtime,Date now) { Calendar calendar = Calendar.getInstance(); calendar.setTime(now); calendar.add(Calendar.DAY_OF_MONTH,-7); Date before7days = calendar.getTime(); if (before7days.getTime() < addtime.getTime()) { return true; } else { return false; } } /** * 返回指定年度的所有周。List中包含的是String[2]对象<br> * string[0]本周的开始日期,string[1]是本周的结束日期。<br> * 日期的格式为yyyy-MM-dd。<br> * 每年的第一个周,必须包含星期一且是完整的七天。<br> * 例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 <br> * 星期一在哪一年,那么包含这个星期的周就是哪一年的周。<br> * 例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。<br> * * @param year 格式 yyyy ,必须大于1900年度 小于9999年 * @return */ public static List<Date[]> getWeeksByYear(final int year) { if (year < 1900 || year > 9999) { throw new NullPointerException("年度必须大于等于1900年小于等于9999年"); } //实现思路,首先计算当年有多少个周,然后找到每个周的开始日期和结束日期 // Calendar calendar = new GregorianCalendar(); // // 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar。 // calendar.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一 // calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY); //每周从周一开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 // calendar.setMinimalDaysInFirstWeek(7); //设置每周最少为7天 // calendar.set(Calendar.YEAR,year); // 设置年度为指定的年 // //首先计算当年有多少个周,每年都至少有52个周,个别年度有53个周 int weeks = getWeekNumByYear(year); // System.out.println(year+"共有"+weeks+"个周"); List<Date[]> result = new ArrayList<Date[]>(weeks); for (int i = 1; i <= weeks; i++) { Date[] tempWeek = new Date[2]; tempWeek[0] = getYearWeekFirstDay(year,i); tempWeek[1] = getYearWeekEndDay(year,i); //或者使用下面的代码,不过发现效率更低 // tempWeek[0] = getDateAdd(firstWeekDay,(i-1)*7+0); // tempWeek[1] = getDateAdd(firstWeekDay,(i-1)*7+6); result.add(tempWeek); // System.out.println(i+"="+tempWeek[0]+"_"+tempWeek[1]); } return result; } /** * 计算指定年度共有多少个周。 * * @param year 格式 yyyy ,必须大于1900年度 小于9999年 * @return */ public static int getWeekNumByYear(final int year) { if (year < 1900 || year > 9999) { throw new NullPointerException("年度必须大于等于1900年小于等于9999年"); } int result = 52;//每年至少有52个周 ,最多有53个周。 String date = format(getYearWeekFirstDay(year,53),"yyyy-MM-dd"); if (date.substring(0,4).equals(year + "")) { //判断年度是否相符,如果相符说明有53个周。 result = 53; } return result; } /** * 计算某年某周的开始日期 * * @param yearNum 格式 yyyy ,必须大于1900年度 小于9999年 * @param weekNum 1到52或者53 * @return 日期,格式为yyyy-MM-dd */ public static Date getYearWeekFirstDay(int yearNum,int weekNum) { if (yearNum < 1900 || yearNum > 9999) { throw new NullPointerException("年度必须大于等于1900年小于等于9999年"); } Calendar cal = Calendar.getInstance(); cal.setFirstDayOfWeek(Calendar.MONDAY); //设置每周的第一天为星期一 cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);//每周从周一开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 cal.setMinimalDaysInFirstWeek(7); //设置每周最少为7天 cal.set(Calendar.YEAR,yearNum); cal.set(Calendar.WEEK_OF_YEAR,weekNum); //分别取得当前日期的年、月、日 return cal.getTime(); } /** * 计算某年某周的结束日期 * * @param yearNum 格式 yyyy ,必须大于1900年度 小于9999年 * @param weekNum 1到52或者53 * @return 日期,格式为yyyy-MM-dd */ public static Date getYearWeekEndDay(int yearNum,Calendar.SUNDAY);//每周从周一开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 cal.setMinimalDaysInFirstWeek(7); //设置每周最少为7天 cal.set(Calendar.YEAR,weekNum); return cal.getTime(); } public static int getWeekNumInYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(date); return calendar.get(Calendar.WEEK_OF_YEAR); } /** * 获取当前日期 * * @return */ public static Date getCurrentDate() { Date today = new Date(); return today; } /** * 根据每周的开始结束日期计算每天日期 * * @param startDate * @param endDate * @return * @throws ParseException */ public static Map<String,Date> getBetweenWeeks(Date startDate,Date endDate) { Calendar tempStart = Calendar.getInstance(); tempStart.setTime(startDate); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(endDate); Map<String,Date> map = new LinkedHashMap<>(); while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) { int week = tempStart.get(Calendar.DAY_OF_WEEK); switch (week) { case 1: map.put("sun",tempStart.getTime()); break; case 2: map.put("mon",tempStart.getTime()); break; case 3: map.put("tue",tempStart.getTime()); break; case 4: map.put("wed",tempStart.getTime()); break; case 5: map.put("thur",tempStart.getTime()); break; case 6: map.put("fri",tempStart.getTime()); break; case 7: map.put("sat",tempStart.getTime()); break; } tempStart.add(Calendar.DAY_OF_YEAR,1); } return map; } public static int interval(Date a,Date b) { return (int) ((b.getTime() - a.getTime())/1000); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何将mybatis配置到springmvc中
- 用Common FileUpload 实现文件的上传
- 当没有关注OSX时,Java线程进入休眠状态
- Java Spring-Cache key配置注意事项介绍
- Java截取字符串的方法
- java – Allure:目标文件夹中的环境文件在maven clean上被
- java – Gradle:战争任务有冲突包含/排除
- Java Apache POI和JDBC:将大量数据导入Excel的智能方法
- java – 在Hibernate中使用Transformers.aliasToBean填充子
- java – Play Framework 2.4不接受控制器的“公共静态结果”