package com.sf.wop.common.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.time.DateFormatUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DateUtil { public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss SSS"; public static final String ORA_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String DATE_TIME_FORMAT_YMD = "yyyyMMdd"; public static final String DATE_TIME_FORMAT_MMDDHHmm = "MMddHHmm"; private static Logger logger = LoggerFactory.getLogger(DateUtil.class); private static final String DATE_FORMAT = "yyyy-MM-dd"; /** * 判断当前日期是星期几 1-7 * * @param pTime 修要判断的时间 * @return dayForWeek 判断结果 * @Exception 发生异常 */ public static int dayOfWeek(String pTime) throws Exception { SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); Calendar c = Calendar.getInstance(); c.setTime(format.parse(pTime)); int dayForWeek = 0; if (c.get(Calendar.DAY_OF_WEEK) == 1) { dayForWeek = 7; } else { dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1; } return dayForWeek; } /** * @param dateBgn 开始日期 * @param dateEnd 结束日期 * @return 日期间隔天数 * @throws ParseException */ public static int getIntervalDays(String dateBgn, String dateEnd) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); Calendar aCalendar = Calendar.getInstance(); aCalendar.setTime(format.parse(dateEnd)); int day2 = aCalendar.get(Calendar.DAY_OF_YEAR); aCalendar.setTime(format.parse(dateBgn)); int day1 = aCalendar.get(Calendar.DAY_OF_YEAR); return day2 - day1; } /** * @param dateBgn 开始日期 * @param dateEnd 结束日期 * @return 日期间隔分钟 * @throws ParseException */ public static long getIntervalMin(String dateBgn, String dateEnd, String format) throws ParseException{ SimpleDateFormat DateFormat = new SimpleDateFormat(format); Date end = DateFormat.parse(dateEnd); Date begin = DateFormat.parse(dateBgn); return (end.getTime() - begin.getTime())/1000/90; } /** * 把日期往后增加n月. 整数往后推,负数往前移动 * * @param dateStr * @param interval * @return * @throws ParseException */ public static String calcMonth(String dateStr, int interval) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); Calendar calendar = new GregorianCalendar(); calendar.setTime(format.parse(dateStr)); calendar.add(Calendar.MONTH, interval); return format.format(calendar.getTime()); } /** * 把日期往后增加n天. 整数往后推,负数往前移动 * * @param dateStr * @param interval * @return * @throws ParseException */ public static String calcDate(String dateStr, int interval) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); Calendar calendar = new GregorianCalendar(); calendar.setTime(format.parse(dateStr)); calendar.add(Calendar.DATE, interval); return format.format(calendar.getTime()); } /** * 把日期往后增加n天. 整数往后推,负数往前移动 * * @param dateStr * @param interval * @return * @throws ParseException */ public static Date calcDate(String dataStr, String format, int interval, int intervalType) throws ParseException{ SimpleDateFormat dateFormat = new SimpleDateFormat(format); Calendar calendar = new GregorianCalendar(); calendar.setTime(dateFormat.parse(dataStr)); calendar.add(intervalType, interval); return calendar.getTime(); } /** * 把日期往后增加n天. 整数往后推,负数往前移动 * * @param dateStr * @param interval * @return * @throws ParseException */ public static Date calcDate(Date date, int interval, int intervalType) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(intervalType, interval); return calendar.getTime(); } /** * 把日期往后增加n天. 整数往后推,负数往前移动 * * @param dateStr * @param interval * @return * @throws ParseException */ public static Date calcDate(String dateStr, int interval, int intervalType) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); Calendar calendar = new GregorianCalendar(); calendar.setTime(format.parse(dateStr)); calendar.add(intervalType, interval); return calendar.getTime(); } public static int getBetweenDays(String t1, String t2) throws ParseException { DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); int betweenDays = 0; Date d1 = format.parse(t1); Date d2 = format.parse(t2); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); // 保证第二个时间一定大于第一个时间 if (c1.after(c2)) { c1 = c2; c2.setTime(d1); } int betweenYears = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR); betweenDays = c2.get(Calendar.DAY_OF_YEAR) - c1.get(Calendar.DAY_OF_YEAR); for (int i = 0; i < betweenYears; i++) { c1.set(Calendar.YEAR, (c1.get(Calendar.YEAR) + 1)); betweenDays += c1.getMaximum(Calendar.DAY_OF_YEAR); } return betweenDays; } /** * 把日期往后增加n天. 整数往后推,负数往前移动 * * @param dateStr * @param interval * @return * @throws ParseException */ public static String calcDate(Date date, int interval) throws ParseException{ SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.DATE, interval); return format.format(calendar.getTime()); } public static List<String> getDaysExcluded(String dateBgn, String dateEnd, String weekSelected){ List<String> days = new ArrayList<>(); String[] weekInfo = weekSelected.split(","); if(weekInfo == null || weekInfo.length == 0){ logger.warn(String.format("at least one day in week should be selectd: %s", weekSelected)); return days; } Map<String, String> dayOfWeekMap = new HashMap<String, String>(); for(String index : weekInfo){ dayOfWeekMap.put(index, index); } Map<String, String> usDayOfweekMap = new HashMap<String, String>(); for(int i = 1; i <= 7; i++){ if(dayOfWeekMap.containsKey(""+i)){ continue; } usDayOfweekMap.put(""+i, ""+i); } //没有排除任何一天 if(usDayOfweekMap.size() == 0){ return days; } int interval = 0; try { interval = getIntervalDays(dateBgn, dateEnd); } catch (ParseException e) { logger.warn(String.format("invalid date format: %s or %s", dateBgn,dateEnd)); return days; } if(interval < 0){ logger.warn(String.format("end day shoule be equal or greater than begin day: %s or %s", dateBgn,dateEnd)); return days; } int dayIndex = 0; try { dayIndex = dayOfWeek(dateBgn); } catch (Exception e) { logger.warn(String.format("invalid date format: %s", dateBgn)); return days; } for(int i=0;i<= interval;i++){ //当前为非选择的星期序号 if(usDayOfweekMap.containsKey(""+dayIndex)){ try { days.add(calcDate(dateBgn, i)); } catch (ParseException e) { } } //下一个日期的星期序号 dayIndex++; if(dayIndex>7){ dayIndex -= 7; } } return days; } public static String format(Date date) { String result = DateFormatUtils.format(date, DATE_TIME_FORMAT); return result; } public static String format(Date date, String format) { String result = DateFormatUtils.format(date, format); return result; } public static Date parseDate(String dateStr) { DateFormat dateFormat = new SimpleDateFormat(ORA_DATE_TIME_FORMAT); try { return dateFormat.parse(dateStr); } catch (ParseException e) { logger.error("DateUtil parseDate error", e); } return null; } public static Date parseDate(String dateStr, String format) { DateFormat dateFormat = new SimpleDateFormat(format); try { return dateFormat.parse(dateStr); } catch (ParseException e) { logger.error("DateUtil parseDate error", e); } return null; } public static List<String> getTimesBetween(String beginDateStr, String endDateStr, String inputFormat, String outFormat, int interval, int intervalType){ List<String> rtn = new ArrayList<String>(); Date beginDate = parseDate(beginDateStr, inputFormat); Date endDate = parseDate(endDateStr, inputFormat); if(beginDate.after(endDate)){ return rtn; } //加入起始日期 rtn.add(format(beginDate, outFormat)); Date curDate = calcDate(beginDate, interval, intervalType); while(!curDate.after(endDate)){ //加入起始日期 rtn.add(format(curDate, outFormat)); curDate = calcDate(curDate, interval, intervalType); } return rtn; } public static void main(String[] args) { // String s = "2016-05-33 15:25:25"; // System.out.println(parseDate(s)); // String cur = "2016-02-21"; // String end = "2016-03-08"; // // try { // System.out.println(dayOfWeek(cur)); // } catch (Exception e) { // e.printStackTrace(); // } // // List<String> days = getDaysExcluded(cur, end, "1,3,5"); // for(String day : days){ // System.out.println(day); // } // // try { // System.out.println(getBetweenDays("2016-01-17","2016-01-19")); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } long stt = System.currentTimeMillis(); List<String> result = getTimesBetween("201606302050","201607010400","yyyyMMddHHmm","ddHH",1,Calendar.HOUR); for(String str : result){ System.out.println(str); } //System.out.println((System.currentTimeMillis() - stt)); } }
相关推荐
在Java编程中,DateUtil工具类是用于处理和操作日期时间的一个常见实用程序类。它提供了许多方便的方法,使得开发者可以轻松地进行日期格式化、转换以及比较等操作。在这个"dateUtil工具类"中,我们可以看到核心功能...
在Java编程领域,DateUtil工具类是开发人员经常会用到的一种辅助类,它提供了一系列方便的方法来处理日期和时间。这个被称为"史上最全面DateUtil工具类,没有之一"的资源,显然包含了处理日期和时间的各种功能,使得...
Java DateUtil 工具类时间戳类型转换详解 Java DateUtil 工具类是 Java 开发中经常使用的一种日期处理工具类,它提供了多种日期处理方法,包括时间戳类型转换、日期格式化、日期解析等。下面我们将详细介绍 Java ...
JS日期工具类,方便大家的使用。后期会持续更新.......
这里我们关注的是`DateUtil`工具类,它专门用于处理日期转换格式的操作。`DateUtil`工具类通常包含了对日期进行格式化、解析、比较等常用功能,使得在Android项目中处理日期变得更加便捷。 在Java中,日期对象主要...
今天,我们将详细介绍DateUtil工具类的实现和使用。 日期工具类的重要性 在Android开发中,日期和时间是非常常见的数据类型。因此,处理日期和时间相关的操作是非常重要的。DateUtil工具类提供了许多有用的方法来...
在Java编程中,DateUtil是一个常见的...这些是DateUtil工具类中常见的功能,它们极大地简化了日期和时间的处理工作,提高了代码的可读性和可维护性。在实际项目中,可以根据需求自定义更多实用的方法,提高开发效率。
DateUtil 日期工具类
DateUtil工具类旨在简化这个过程。它可能包含一系列静态方法,如获取当前日期、格式化日期字符串、进行日期比较、计算两个日期之间的差值等。例如,可以有一个`formatDate(Date date, String pattern)`方法,用于将...
dateUtil js工具类
原创强大的jdbc数据库操作工具类: 1.获取数据源 2.设置数据源 3.获取数据库连接 4.执行insert/delete语句,一个参数列表 ...源码用到的DateUtil工具类,请到http://download.csdn.net/detail/whatismvc/5994343下载。
Java中的DateUtil时间工具类是开发者在处理日期和时间时常用的一个自定义工具类。它通常包含了一系列静态方法,用于简化Java内置的日期和时间API的使用,提高代码的可读性和可维护性。在实际开发中,由于Java 8之前...
在Java编程语言中,`DateUtil`通常是一个自定义的工具类,用于处理与日期和时间相关的操作。这个工具类可以极大地简化日期处理任务,提供比Java内置的`java.util.Date`和`java.time`包更友好的API。在本文中,我们将...
DateUtil工具类可能提供了一些便捷的方法,如快速格式化日期、计算两个日期之间的差值、获取当前日期与时间等。例如,`DateUtil.formatDate()`可以将日期对象转换为指定格式的字符串,`DateUtil.between()`用于计算...
资源名称:DateUtil 日期时间转换工具类 内容概要:日期时间转换工具类,包括基本的Date类型,String类型,TimeStamp类型,LocalDateTime类型,LocalDate类型之间的互相转换,还提供了许多与时间获取,时间计算有关...
个人整理的java的关于Date对象的日期时间处理工具类,若存在问题还望大家在评论中提出,我将一直进行修改维护
DateUtil 工具类提供了 isLeapYear 方法,用于判断是否是润年。该方法通过对年份进行判断,来确定是否是润年。 日期相加减 DateUtil 工具类还提供了日期相加减的操作。例如,可以使用 Calendar 对象来对日期进行加...