获取指定月份第一天时间

getMinDateMonth

,最后一天时间

getMaxDateMonth

,将时间区间按照月份分组,拆分多个片段

getDateSplitMonth

指定月份的下个月

getNextMonth

import java.math.BigDecimal;
import java.text.*;
import java.util.*;import com.alibaba.fastjson.JSONObject;
import com.lichu.pospay.common.util.Tool;
import com.sun.jna.platform.win32.OaIdl;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;/** * 日期工具类,获取日期类型数据*/
public class DateUtils {/*** 当前时间的毫秒数*/static long now = System.currentTimeMillis();/*** 当前日期*/public static java.util.Date CurrTime = new java.util.Date(now);/*** 当前sql时间*/public static java.sql.Timestamp CurrSqlTime = new java.sql.Timestamp(now);/*** 日期*/private static Date date = new Date();/*** 构造函数*/public DateUtils() {}/*** 获取当前时间的Long类型*/public static long getNow() {CurrTime = new java.util.Date();return CurrTime.getTime();}/*** 获取某年某月的所有周末的日期* @param year* @param month*/public static List getMonthWeekend(int year, int month) {int num = 0;List weekendList = new ArrayList();String week = null;Calendar cal = Calendar.getInstance();cal.setTimeZone(TimeZone.getDefault());cal.clear();int dateNum = getMonthDay(year,month);for(int date=1;date<=dateNum;date++){cal.set(year, month - 1, date);num = cal.get(cal.DAY_OF_WEEK);if(num == 1 || num == 7){weekendList.add(new Integer(date));}}return weekendList;}/*** 获取beginDate开始的日期到endDate连续的日期* @param beginDate* @param endDate*/public static List<String> getDateFromToList(String beginDate, String endDate) {List<String> listDate = new ArrayList<String>();Date sDate = getDateBy(beginDate);Date eDate = getDateBy(endDate);// 将时间格式化为YYYY-MM-DDDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");while (!sDate.after(eDate)) {listDate.add(dateformat.format(sDate));sDate = btoEDate(sDate, 1);}return listDate;}/*** 根据String类型转换成Date* @param date*/private static Date getDateBy(String date) {String[] end = date.split(" ")[0].split("-");Date eDate = new Date(Integer.parseInt(end[0]) - 1900, Integer.parseInt(end[1]) - 1, Integer.parseInt(end[2]));return eDate;}/*** 当前时间增加/减去几天后,以及增加/减少几个月的的日期* @param date (java. util.Date)* @param datelen (增加或者减少几天)* @param monthlen (增加或者减少几个月)* @param formate 需要转化的格式* @return* create BY Haolp on 2016-12-29*/public static String btoMonthDate(Date date, int datelen,int monthlen,String formate ){String   datemonth="";Calendar cal = new GregorianCalendar();cal.setTime(date);//月数if (monthlen != 0) {cal.add(cal.MONTH, monthlen);//月数加减   }//天数if (datelen != 0) {cal.add(Calendar.DAY_OF_MONTH, datelen);//天数加减   }Date newdate = cal.getTime();     java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(formate);      datemonth= format.format(newdate);return datemonth;}/*** 当前时间增加/减去几天后,以及增加/减少几个月的的日期* @param sourcedate (java. util.Date) yyyy-MM-dd* @param datelen (增加或者减少几天)* @param monthlen (增加或者减少几个月)* @param targetformate 需要转化的格式 * @return* create BY Haolp on 2016-12-29*/public static String btoMonthDate(String sourcedate, int datelen,int monthlen,String targetformate ){String   datemonth="";try {DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); Date date = format1.parse(sourcedate);Calendar cal = new GregorianCalendar();cal.setTime(date);//月数if (monthlen != 0) {cal.add(cal.MONTH, monthlen);//月数加减   }//天数if (datelen != 0) {cal.add(Calendar.DAY_OF_MONTH, datelen);//天数加减   }Date newdate = cal.getTime();     java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(targetformate);      datemonth= format.format(newdate);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();} return datemonth;}/*** 当前时间增加/减去分钟* @param date* @param minutelen* @param format* @return* @author lzx on 2017-09-01*/public static String btoMinuteDate(Date date, int minutelen, String format){String dateminute = "";Calendar cal = new GregorianCalendar();cal.setTime(date);cal.add(cal.MINUTE, minutelen);Date newdate = cal.getTime();SimpleDateFormat sdf = new SimpleDateFormat(format);dateminute = sdf.format(newdate);return dateminute;}/*** 当前时间增加几天后的日期* @param date* @param len*/public static Date btoEDate(Date date, int len){if (len != 0) {if (len > 0) {for (int i = 0; i < len; i++) {date = dateAdd(date);}} else if (len < 0) {for (int i = 0; i > len; i--) {date = datePro(date);}}}return date;}/*** 当前日期 的后一天* @param date*/private static Date dateAdd(Date date){Calendar cal = GetCalendar(date);int year = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH) + 1;int day = cal.get(Calendar.DATE);day++;if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)if (day == 32) {day = 1;month++;}if (month == 4 || month == 6 || month == 9 || month == 11)if (day == 31) {day = 1;month++;}if (month == 2)if (CheckRun(year)) {if (day == 30) {day = 1;month++;}} else {if (day == 29) {day = 1;month++;}}if (month == 13) {month = 1;year++;}cal.set(year,month - 1,day);return cal.getTime();}/*** 当前日期的前一天* @param date*/private static Date datePro(Date date) {Calendar cal = GetCalendar(date);int year = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH) + 1;int day = cal.get(Calendar.DATE);day--;if (day == 0) {month--;if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10)day = 31;else if (month == 4 || month == 6 || month == 9 || month == 11)day = 30;else if (month == 2)if (CheckRun(year)) {day = 29;} else {day = 28;}else if (month == 0) {month = 12;day = 31;year--;}}cal.set(year,month - 1,day);return cal.getTime();}/*** date类型转换成Calendar类型* @param date*/private static Calendar GetCalendar(Date date) {Calendar cal = new GregorianCalendar();cal.setTime(date);return cal;}/*** 判断闰年* @param year*/private static boolean CheckRun(int year){if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {return true;} else {return false;}}///
/*** 判断是否是闰年* @param The_Year*/public static boolean RunNian(int The_Year){if ((The_Year%400==0) || ((The_Year%4==0) && (The_Year%100!=0)))return true;elsereturn false;}/*** 获取某年某月的天数* @param the_Year* @param the_Month*/public static int getMonthDay(int the_Year,int the_Month){int month_Day = 0;String showMonth = "";switch (the_Month){case 1 : showMonth = "一月"; month_Day = 31; break;case 2 :showMonth = "二月";if (RunNian(the_Year))month_Day = 29;elsemonth_Day = 28;break;case 3 : showMonth = "三月"; month_Day = 31; break;case 4 : showMonth = "四月"; month_Day = 30; break;case 5 : showMonth = "五月"; month_Day = 31; break;case 6 : showMonth = "六月"; month_Day = 30; break;case 7 : showMonth = "七月"; month_Day = 31; break;case 8 : showMonth = "八月"; month_Day = 31; break;case 9 : showMonth = "九月"; month_Day = 30; break;case 10 : showMonth = "十月"; month_Day = 31; break;case 11 : showMonth = "十一月"; month_Day = 30; break;case 12 : showMonth = "十二月"; month_Day = 31; break;}return month_Day;}/*** 通过字符串HH:mm:ss得到毫秒值** @param s String 格式为HH:mm:ss的字符串* @return long 转换后的毫秒值*/public static long getTimebyString(String s) {int i = s.indexOf(":");int j = s.lastIndexOf(":");long time = 0;if ((i != -1) && (j != -1)) {int hh = Integer.parseInt(s.substring(0, i));int mm = Integer.parseInt(s.substring(i + 1, j));int ss = Integer.parseInt(s.substring(j + 1, s.length()));time = hh * 60 * 60 * 1000 + mm * 60 * 1000 + ss * 1000;}return time;}/*** 通过字符串HH:mm得到毫秒值* @param s* String 格式为HH:mm的字符串* @return long 转换后的毫秒值*/public static long getTimesbyString(String s) {int i = s.indexOf(":");long time = 0;if ((i != -1)) {int hh = Integer.parseInt(s.substring(0, i));int mm = Integer.parseInt(s.substring(i + 1, s.length()));time = hh * 60 * 60 * 1000 + mm * 60 * 1000;}return time;}/*** String 格式为HH:mm的字符串* 单位毫秒* 根据2个时间计算时间差*/public static long getTimeDifference(String begintime,String endtime){long begintimelong =getTimesbyString(begintime);long endtimelong =getTimesbyString(endtime);if(begintimelong >= endtimelong){return 0;}else{return endtimelong-begintimelong ;}}/*** 格式化日期** @param date*            Date 日期* @param string*            String 格式字符串* @return String 格式化后日期*/public static String FormatDate(Date date, String string) {SimpleDateFormat dateformat = new SimpleDateFormat(string);return dateformat.format(date);}/*** 取得当前时间格式yyyy-MM-dd HH:mm:ss* @return String*/public static String getCurrTime() {java.util.Date date_time = new Date();return FormatDate(date_time, "yyyy-MM-dd HH:mm:ss");}/*** 取得当前时间格式yyyy-MM-dd HH:mm:ss:millis* @return String*/public static String getCurrMillisTime() {long l = System.currentTimeMillis();String d = DateUtils.getCurrTime();return d+":"+(l-DateUtils.getTimeInMillis(d, "yyyy-MM-dd HH:mm:ss"));}/*** 取得当前时间格式yyyy-MM-dd HH:mm* @return String*/public static String getCurrShortTime() {Date date = new Date();return FormatDate(date, "yyyy-MM-dd HH:mm");}/*** 取得当前时间格式yyyy-MM-dd* @return String*/public static String getCurrDate() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "yyyy-MM-dd");}/*** 取得当前年份* @return String*/public static String getCurrYear() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "yyyy");}/*** 取得当前月份* @return String*/public static String getCurrMonth() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "MM");}/*** 取得当前日* @return String*/public static String getCurrDay() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "dd");}/*** 取得当前小时* @return String*/public static String getCurrHours() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "HH");}/*** 取得当前分钟* @return String*/public static String getCurrMinutes() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "mm");}/*** 取得当前秒* @return String*/public static String getCurrSeconds() {CurrTime = new java.util.Date();return FormatDate(CurrTime, "ss");}/*** 转换日期格式yyyy-MM-dd* @param date  Date 日期* @return String*/public static String dayToString(Date date) {return FormatDate(date, "yyyy-MM-dd");}/*** 转换日期格式yyyy-MM-dd HH:mm:ss** @param date  Date 日期* @return String*/public static String dateToString(Date date) {return FormatDate(date, "yyyy-MM-dd HH:mm:ss");}/*** 转换日期格式yyyy-MM-dd HH:mm:ss** @param date*            Date 日期* @return String*/public static String dateToString(java.sql.Date date) {return FormatDate(date, "yyyy-MM-dd HH:mm:ss");}/*** 转换日期格式yyyy-MM-dd HH** @param date*            Date 日期* @return String*/public static String dateToString1(java.sql.Date date) {return FormatDate(date, "yyyy-MM-dd");}/*** 转换日期格式yyyy-MM-dd HH:mm** @param date*            Date 日期* @return String*/public static String dateToShortString(Date date) {return FormatDate(date, "yyyy-MM-dd HH:mm");}/*** 说明:由时间格式的字符串获得年数** @param dateString*            时间格式字符串* @return*/public static int getYearByString(String dateString) {int year = 0;int i = dateString.indexOf("-");int j = dateString.lastIndexOf("-");if (i != -1 && j != -1) {year = Integer.parseInt(dateString.substring(0, i));}return year;}/*** 说明:由时间格式的字符串获得月份数* @param dateString*            时间格式字符串* @return*/public static int getMonthByString(String dateString) {int month = 1;int i = dateString.indexOf("-");int j = dateString.lastIndexOf("-");if (i != -1 && j != -1) {month = Integer.parseInt(dateString.substring(i + 1, j));}return month;}/*** 获取指定日期的天* @param dateString* @return*/public static int getDateByString(String dateString) {int date = 1;int i = dateString.indexOf("-");int j = dateString.lastIndexOf("-");//System.out.println("i--------------)"+i);if (i != -1 && j != -1) {date = Integer.parseInt(dateString.substring(j+1, j+3));//System.out.println("date--------------)"+date);}return date;}/*** 说明: 字符串转换为日期 (默认格式 yyyy-MM-dd)** @param dateString*            日期格式字符串* @return 转换后的日期*/public static Date stringToDate(String dateString) {String sf = "yyyy-MM-dd";Date dt = stringToDate(dateString, sf);return dt;}/*** 说明:字符串转换为时间(默认格式 yyyy-MM-dd HH:mm:ss)** @param dateString*            日期格式字符串* @return 转换后的日期*/public static Date StringToTime(String dateString) {String sf = "yyyy-MM-dd HH:mm:ss";Date dt = stringToDate(dateString, sf);return dt;}/*** 说明:时间字符串格式转换(默认格式 yyyyMMddHHmmss),主要为接口部分所用** @param dateString*            日期格式字符串 (默认格式 yyyyMMddHHmmss)* @return 转换后的日期格式字符串(yyyy-MM-dd HH:mm:ss) add by zhangjie*/public static String timeStringChange(String dateString) {String sf = "yyyyMMddHHmmss";Date dt = stringToDate(dateString, sf);String sc = dateToString(dt);return sc;}/*** 日期转换* @param dateString* @param sfin* @param sfout* @return*/public static String timeStringChange(String dateString,String sfin,String sfout) {Date dt = stringToDate(dateString, sfin);String sc = FormatDate(dt, sfout);return sc;}/*** 获得当前日期的年月,形成格式为YYMM的字符串** @return String 年月字符串,格式YYMM*/public static String getPublicDate() {Calendar c = Calendar.getInstance();int month = c.get(Calendar.MONTH) + 1;String pd = ("" + c.get(Calendar.YEAR)).substring(2, 4)+ (month > 9 ? "" + month : "0" + month);return pd;}/*** 根据参数计算并给出当前日期返回制定月所在的年** @param getback*            int 返回制定月所在的年* @return int*/public static int backyear(int getback) {int back_year = 0;CurrTime = new java.util.Date();int nowyear = Integer.parseInt(FormatDate(CurrTime, "yyyy"));int nowmonth = Integer.parseInt(FormatDate(CurrTime, "MM"));if (nowmonth > getback) {back_year = nowyear;} else {back_year = nowyear - 1;}return back_year;}/*** 根据参数计算并给出当前日期返回制定月所在的年** @param getback*            int 返回制定月所在的年* @return int*/public static int backmonth(int getback) {int back_month = 0;CurrTime = new java.util.Date();int nowyear = Integer.parseInt(FormatDate(CurrTime, "yyyy"));int nowmonth = Integer.parseInt(FormatDate(CurrTime, "MM"));if (nowmonth > getback) {back_month = nowmonth - getback;} else {back_month = nowmonth - getback + 12;}return back_month;}/*** 根据参数计算并给出所需的年** @param date*            Date 日期* @param getback*            int 返回制定月所在的年* @return String*/public static String dateToyear(Date date, int getback) {String dateyear = FormatDate(date, "yyyy");String datemonth = FormatDate(date, "MM");String newyear = "";int oldyear = Integer.parseInt(dateyear);int oldmonth = Integer.parseInt(datemonth);if (oldmonth > getback) {newyear = String.valueOf(oldyear);} else {newyear = String.valueOf(oldyear - 1);}return newyear;}/*** 根据参数计算并给出所需的月** @param date*            Date 日期* @param getback*            int 返回制定月所在的年* @return String*/public static String dateTomonth(Date date, int getback) {String dateyear = FormatDate(date, "yyyy");String datemonth = FormatDate(date, "MM");String newmonth = "";int oldmonth = Integer.parseInt(datemonth);if (oldmonth > getback) {newmonth = String.valueOf(oldmonth - getback);} else {newmonth = String.valueOf(oldmonth + 12 - getback);}return newmonth;}/*** 根据给定的两个时间计算时间差** @param date_1*            Date 日期* @param date_2*            Date 日期* @return int*/public static int subtime(Date date_1, Date date_2) {String dateyear_1 = FormatDate(date_1, "yyyy");String datemonth_1 = FormatDate(date_1, "MM");String dateyear_2 = FormatDate(date_2, "yyyy");String datemonth_2 = FormatDate(date_2, "MM");int year_1 = Integer.parseInt(dateyear_1);int year_2 = Integer.parseInt(dateyear_2);int month_1 = Integer.parseInt(datemonth_1);int month_2 = Integer.parseInt(datemonth_2);int subtime = (year_2 - year_1) * 12 + (month_2 - month_1) + 1;return subtime;}/*** 根据给定的两个时间字符串计算时间差** @param dateString1*            String 时间* @param dateString2*            String 时间* @return long 时间差以秒为单位(dateString2-dateString1)*/public static long subsecond(String dateString1, String dateString2) {Date date_1 = StringToTime(dateString1);Date date_2 = StringToTime(dateString2);long subsecond = (date_2.getTime() - date_1.getTime()) / 1000;return subsecond;}/*** 将一个表示秒数的字符串转换为n小时n分钟n秒的字符串** @param dateString*            String 日期字符串* @return String*/public static String changeFormat(String dateString) {int date = Integer.parseInt(dateString);int hh = 0;int mm = 0;int ss = 0;hh = date / 3600;mm = date % 3600 / 60;ss = date % 3600 % 60;String changedtime = hh + "小时";if (mm != 0) {changedtime += (hh + "分钟");}if (ss != 0) {if (mm == 0) {changedtime += "0分钟";}changedtime += (ss + "秒");}return changedtime;}/*** 将一个表示秒数的字符串转换为天数** @param timelength*            long 秒数* @return long*/public static long changeSecondToDay(long timelength) {long day = 0;if (timelength % (24 * 3600) == 0) {day = timelength / 24 / 3600;} else {day = timelength / 24 / 3600 + 1;}return day;}/*** 将一个表示秒数的字符串转换为分钟** @param timelengthString*            String 秒数的字符串* @return String*/public static String changeSecondToMinute(String timelengthString) {long minute = 0;String minuteString = "";long timelength = Long.parseLong(timelengthString);if (timelength % 60 == 0) {minute = timelength / 60;} else {minute = timelength / 60 + 1;}minuteString = Long.toString(minute) + "分";return minuteString;}/*** 改变日到分* @param dayString*            String 日字符串* @return String*/public static String changeDayToMinute(String dayString) {long minute = 0;long day = Long.parseLong(dayString);String minuteString = "";minute = day * 24 * 60;minuteString = Long.toString(minute) + "分";return minuteString;}/*** 改变分到小时** @param minuteString*            String 分字符串* @return String*/public static String changeMinuteToHour(String minuteString) {long minute = Long.parseLong(minuteString);long hour = 0;String hourString = "";if (minute % 60 == 0) {hour = minute / 60;hourString = Long.toString(hour) + "小时";} else {hour = minute;hourString = Long.toString(hour) + "分钟";}return hourString;}/*** 字符串转换为日期** @param dateString*            String 日期格式字符串* @param sf*            String 日期格式化定义* @return Date 转换后的日期*/public static Date stringToDate(String dateString, String sf) {ParsePosition pos = new ParsePosition(0);SimpleDateFormat sdf = new SimpleDateFormat(sf);Date dt = sdf.parse(dateString, pos);return dt;}/*** 取得月份字符串** @return String*/public static String getMonthStr() {java.util.Date date = new java.util.Date();return (date.getYear() + 1900) + "" + ("" + date.getMonth());}/*** 将从oracle中取出的Date类型字符串(YYYY-MM-DD HH24:MI:SS.ms)转化为YYYY-MM-DD HH24:MI:SS** @param date*            String 日期* @return String*/public static String changeOracleDate(String date) {if (date!=null&&date.indexOf(".") != -1) {return date.substring(0, date.indexOf("."));} else {return date;}}public static String getCurrTimes() {java.util.Date date_time = new Date();return FormatDate(date_time, "HH:mm:ss");}/*** 根据传近来的时间和时间格式得到对应的星期** @param TempDate*            时间* @param format*            "yyyy-MM-dd"* @return int 1~7代表星期日到星期六* @deprecated Use {@link #getWeekDay(String,String)} instead*/public static int GetWeekDay(String TempDate, String format) {return getWeekDay(TempDate, format)+1;
}/*** 根据传近来的时间和时间格式得到对应的星期** @param TempDate*            时间* @param format*            "yyyy-MM-dd"* @return int 0~6代表星期日到星期六*/public static int getWeekDay(String TempDate, String format) {int temp = 0;SimpleDateFormat sdf = new SimpleDateFormat(format);Calendar c = Calendar.getInstance();try {c.setTime(sdf.parse(TempDate));temp = c.get(Calendar.DAY_OF_WEEK);} catch (Exception e) {e.printStackTrace();}return temp-1;}/*** 根据 传入的时间、时间格式 和 天数,返回指定的日期*time 当前时间*format 时间格式 yyyy-MM-dd HH:mm:ss*date 天数,如果是后3天则 -3,前3天则 是 3*/public static String getTimeToAddDate(String time,String format,int date){Calendar calendar = Calendar.getInstance();calendar.setTimeZone(TimeZone.getDefault());calendar.clear();calendar.setTime(stringToDate(time,format));// 开始时间calendar.add(Calendar.DAY_OF_MONTH,date);return FormatDate(calendar.getTime(),format);}/*** 获取某个日期在本年度所在第几周* @param dateString* @return*/public static int getWeeknumOfYear(String dateString) {int weeknum = 1;String year = dateString.substring(0, 4);String newYearsDay = year + "-01-01";Date date_1 = DateUtils.stringToDate(newYearsDay);Date date_2 = DateUtils.stringToDate(dateString);long subsecond = (date_2.getTime() - date_1.getTime()) / 1000;int days = (int)(subsecond/(3600*24));int newYearsWeek = DateUtils.getDayOfWeek(Integer.parseInt(year), 1, 1)-1;weeknum = (newYearsWeek + days)/7 + 1;return weeknum;}/*** 将阿拉伯数字转换成中文星期几* @param i* @return*/public static String getChineseNum(int i) {switch (i) {case 0:return "日";case 1:return "一";case 2:return "二";case 3:return "三";case 4:return "四";case 5:return "五";case 6:return "六";default:return null;}}/*** 根据 传入的时间、时间格式 和 天数,返回指定时间段后多少毫秒会自动追加*time 当前时间*format 时间格式 yyyy-MM-dd HH:mm:ss*timeInMillis 毫秒,表示当前时间段后多少毫秒会自动追加*/public static String getTimeInMillisToAdd(String time,String format,long timeInMillis){Calendar calendar = Calendar.getInstance();calendar.setTimeZone(TimeZone.getDefault());calendar.clear();calendar.setTime(stringToDate(time,format));// 开始时间calendar.setTimeInMillis(calendar.getTimeInMillis()+timeInMillis);return dateToString(calendar.getTime());}/*** 根据 传入的时间、时间格式 ,返回毫秒*time 指定时间*format 时间格式 yyyy-MM-dd HH:mm:ss*/public static long getTimeInMillis(String time,String format){Calendar calendar = Calendar.getInstance();calendar.setTimeZone(TimeZone.getDefault());calendar.clear();calendar.setTime(stringToDate(time, format));// 开始时间return calendar.getTimeInMillis();}/*** 根据 传入的时间、时间格式 ,返回微秒*time 指定时间*format 时间格式 yyyy-MM-dd HH:mm:ss*/public static long getTimeInUs(String time,String format){Calendar calendar = Calendar.getInstance();calendar.setTimeZone(TimeZone.getDefault());calendar.clear();calendar.setTime(stringToDate(time, format));// 开始时间return calendar.getTimeInMillis()*1000;}/*** 传一个时间段得到这个时间段中有多少个周末** @param beginDay*            int 2007-01-01* @param endDay*            int 2007-01-31* @return int 1-31的一天*/public static int getWeekDays(String beginDay, String endDay) {int k = 0;Calendar calBegin = Calendar.getInstance();calBegin.setTimeZone(TimeZone.getDefault());calBegin.clear();calBegin.setTime(stringToDate(beginDay));// 开始时间Calendar calEnd = Calendar.getInstance();calEnd.setTimeZone(TimeZone.getDefault());calEnd.clear();calEnd.setTime(stringToDate(endDay));// 结束时间while (calBegin.before(calEnd)) {// 星期天 是 1 ,星期6 为 7if (calBegin.get(calBegin.DAY_OF_WEEK) == 1|| calBegin.get(calBegin.DAY_OF_WEEK) == 7) {++k; // 有就给K加1}calBegin.roll(calBegin.DATE, true); // 当前日期向前动1天递增// System.out.println(calBegin.getTime());if (calBegin.after(calEnd)) { // 开始时间大于结束时间 就结束循环break;}}if (getWeekDay(endDay, "yyyy-MM-dd") == 1|| getWeekDay(endDay, "yyyy-MM-dd") == 7) {k += 1;}return k;}/*** 计算星期几的函数** @param year*            int* @param month*            int* @param date*            int* @return int 1~7代表星期日到星期六*/public static int getDayOfWeek(int year, int month, int date) {Calendar cal = Calendar.getInstance();cal.setTimeZone(TimeZone.getDefault());cal.clear();cal.set(year, month - 1, date);return cal.get(cal.DAY_OF_WEEK);}/*** 计算星期几的函数** @param year*            int* @param month*            int* @param date*            int* @return int 1~7代表星期日到星期六*/public static String getDayOfWeekname(int year, int month, int date) {int num = 0;String week = null;Calendar cal = Calendar.getInstance();cal.setTimeZone(TimeZone.getDefault());cal.clear();cal.set(year, month - 1, date);num = cal.get(cal.DAY_OF_WEEK);if(num == 1){week= "星期日";}else if(num == 2){week= "星期一";}else if(num == 3){week= "星期二";}else if(num == 4){week= "星期三";}else if(num == 5){week= "星期四";}else if(num == 6){week= "星期五";}else if(num == 7){week= "星期六";}return week;}/*** 根据传进来的参数得到当前月最后一天*/public static int getLastDayOfMonth(String time, String format) {Calendar cDay1 = Calendar.getInstance();cDay1.setTime(stringToDate(time, format));int lastDay = cDay1.getActualMaximum(Calendar.DAY_OF_MONTH);return lastDay;}/*** 获取两个年月之间的月差(maxdate-mindate)* @author caibh* @param mindate 格式:2008-08* @param maxdate 格式:2008-08* @return 月数*/public static int getMonthsBetween(String mindate, String maxdate) {if (isBlank(mindate) || isBlank(maxdate)) {return 0;}String minyear = mindate.substring(0,4);String minmonth = mindate.substring(5);String maxyear = maxdate.substring(0, 4);String maxmonth = maxdate.substring(5);return (Integer.parseInt(maxyear)-Integer.parseInt(minyear))*12+(Integer.parseInt(maxmonth)-Integer.parseInt(minmonth));}/*** 判断字符串是否为空或null* @param str* @return*/public static boolean isBlank(String str){if (str == null || "".equals(str)) return true;else return false;}/*** 格式化公文日期* @param str 源字符串中的字符2008-11-10* @return*/public static String formatOfficialDate(String str,String flag){StringBuffer sb = new StringBuffer();int pos1 = str.indexOf("-");int pos2 = str.lastIndexOf("-");if("upper".equalsIgnoreCase(flag)){for(int i = 0; i < 4; i++){sb.append(upperDigit(str.charAt(i)));}sb.append('年');if(getMidLen(str,pos1,pos2) == 1){sb.append(upperDigit(str.charAt(5))+"月");if(str.charAt(7) != '0'){if(getLastLen(str, pos2) == 1){sb.append(upperDigit(str.charAt(7))+"日");}if(getLastLen(str, pos2) == 2){if(str.charAt(7) != '1' && str.charAt(8) != '0'){sb.append(upperDigit(str.charAt(7))+"十"+upperDigit(str.charAt(8))+"日");}else if(str.charAt(7) != '1' && str.charAt(8) == '0'){sb.append(upperDigit(str.charAt(7))+"十日");}else if(str.charAt(7) == '1' && str.charAt(8) != '0'){sb.append("十"+upperDigit(str.charAt(8))+"日");}else{sb.append("十日");}}}else{sb.append(upperDigit(str.charAt(8))+"日");}}if(getMidLen(str,pos1,pos2) == 2){if(str.charAt(5) != '0' && str.charAt(6) != '0'){sb.append("十"+upperDigit(str.charAt(6))+"月");if(getLastLen(str, pos2) == 1){sb.append(upperDigit(str.charAt(8))+"日");}if(getLastLen(str, pos2) == 2){if(str.charAt(8) != '0'){if(str.charAt(8) != '1' && str.charAt(9) != '0'){sb.append(upperDigit(str.charAt(8))+"十"+upperDigit(str.charAt(9))+"日");}else if(str.charAt(8) != '1' && str.charAt(9) == '0'){sb.append(upperDigit(str.charAt(8))+"十日");}else if(str.charAt(8) == '1' && str.charAt(9) != '0'){sb.append("十"+upperDigit(str.charAt(9))+"日");}else{sb.append("十日");}}else{sb.append(upperDigit(str.charAt(9))+"日");}}}else if(str.charAt(5) != '0' && str.charAt(6) == '0'){sb.append("十月");if(getLastLen(str, pos2) == 1){sb.append(upperDigit(str.charAt(8))+"日");}if(getLastLen(str, pos2) == 2){if(str.charAt(8) != '0'){if(str.charAt(8) != '1' && str.charAt(9) != '0'){sb.append(upperDigit(str.charAt(8))+"十"+upperDigit(str.charAt(9))+"日");}else if(str.charAt(8) != '1' && str.charAt(9) == '0'){sb.append(upperDigit(str.charAt(8))+"十日");}else if(str.charAt(8) == '1' && str.charAt(9) != '0'){sb.append("十"+upperDigit(str.charAt(9))+"日");}else{sb.append("十日");}}else{sb.append(upperDigit(str.charAt(9))+"日");}}}else{sb.append(upperDigit(str.charAt(6))+"月");if(getLastLen(str, pos2) == 1){sb.append(upperDigit(str.charAt(8))+"日");}if(getLastLen(str, pos2) == 2){if(str.charAt(8) != '0'){if(str.charAt(8) != '1' && str.charAt(9) != '0'){sb.append(upperDigit(str.charAt(8))+"十"+upperDigit(str.charAt(9))+"日");}else if(str.charAt(8) != '1' && str.charAt(9) == '0'){sb.append(upperDigit(str.charAt(8))+"十日");}else if(str.charAt(8) == '1' && str.charAt(9) != '0'){sb.append("十"+upperDigit(str.charAt(9))+"日");}else{sb.append("十日");}}else{sb.append(upperDigit(str.charAt(9))+"日");}}}}}else{String y=str.substring(0,pos1);          String m=str.substring(pos1+1, pos2);String d=str.substring(pos2+1);sb.append(y+"年");sb.append(m+"月");sb.append(d+"日");//System.out.println("y==="+y+"m==="+m+"d===="+d);}return sb.toString();}/*** 将源字符串中的阿拉伯数字格式化为汉字* @param sign 源字符串中的字符* @return*/public static char upperDigit(char sign){if(sign == '0')sign = '○';if(sign == '1')sign = '一';if(sign == '2')sign = '二';if(sign == '3')sign = '三';if(sign == '4')sign = '四';if(sign == '5')sign = '五';if(sign == '6')sign = '六';if(sign == '7')sign = '七';if(sign == '8')sign = '八';if(sign == '9')sign = '九';return sign;}/*** 获得月份字符串的长度* @param str  待转换的源字符串* @param pos1 第一个'-'的位置* @param pos2 第二个'-'的位置* @return*/public static int getMidLen(String str,int pos1,int pos2){return str.substring(pos1+1, pos2).length();}/*** 获得日期字符串的长度* @param str  待转换的源字符串* @param pos2 第二个'-'的位置*/public static int getLastLen(String str,int pos2){return str.substring(pos2+1).length();}public static String converDate(String sourceTime,String sourceSDF,String tagerSDF){try {SimpleDateFormat souceSimperDateFormat=new SimpleDateFormat(sourceSDF);SimpleDateFormat tagerSimperDateFormat=new SimpleDateFormat(tagerSDF);Date date=souceSimperDateFormat.parse(sourceTime);return tagerSimperDateFormat.format(date);} catch (ParseException e) {}return "";}//当前时间的前后分钟public static Date btoMin(String time,int len) throws ParseException{SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date date = new Date();Calendar c = Calendar.getInstance();c.setTime(df.parse(time));c.add(Calendar.MINUTE,len);date=c.getTime();return date;}public static List<String> getWeeks(String year){List<String> weeks = new ArrayList<String>();for(int i=1;i<53;i++){String week = "";if(i<10){week = "0" + i;}else{week = i + "";}String yw = year + "-" + week;weeks.add(yw);}return weeks;}public static List<String> getMonths(String year){List<String> years = new ArrayList<String>();for(int i=1;i<13;i++){String month = "";if(i<10){month = "0" + i;}else{month = i + "";}String ym = year + "-" + month;years.add(ym);}return years;}/*** 获取:该年当前时间月份:加n个月,或者减n个月集合,可排序。* 升序getCurrentMonths(asc):xxxx-01 xxxx-02 xxxx-03* 降序getCurrentMonths(desc):xxxx-03 xxxx-02 xxxx-01* @param num  :加n个月,或者减n个月* @param sort : asc 、desc* @return*/public static List<String> getCurrentMonths(int num,String sort){String currentyear=getCurrYear();//当前年份int  currmonth=Integer.valueOf(getCurrMonth());//当前月份String prevyear=btoMonthDate(date, 0, num, "yyyy");int prevmonth=Integer.valueOf(btoMonthDate(date, 0, num, "MM"));//升序if(Objects.equals(sort, "asc")){List<String> years = new ArrayList<String>();for(int i=prevmonth;i<=12;i++){String month = "";if(i<10){month = "0" + i;}else{month = i + "";}String ym = prevyear + "-" + month;years.add(ym);}for(int i=1;i<=currmonth;i++){String month = "";if(i<10){month = "0" + i;}else{month = i + "";}String ym = currentyear + "-" + month;years.add(ym);}return years;//降序}else if(Objects.equals(sort, "desc")){List<String> years = new ArrayList<String>();for(int i=currmonth;i>=1;i--){String month = "";if(i<10){month = "0" + i;}else{month = i + "";}String ym = currentyear + "-" + month;years.add(ym);}for(int i=12;i>=prevmonth;i--){String month = "";if(i<10){month = "0" + i;}else{month = i + "";}String ym = prevyear + "-" + month;years.add(ym);}return years;}return null;}/*** 判断2021年法定节假日* @param day* @return*/public static boolean isWorkday(String day) {String[] workday = {"2021-02-07","2021-02-20",//2021春节调休2天(周日)(周六)"2021-04-25","2021-05-08",//2021劳动节调休2天(周日)(周六)"2021-09-18",//中秋节(周六)"2021-09-26","2021-10-09"//2020国庆调休2天(周日)(周六)};String[] holiday = {"2021-01-01","2021-01-02","2021-01-03",//元旦,调休1天"2021-02-11","2021-02-12","2021-02-13","2021-02-14","2021-02-15","2021-02-16","2021-02-17",//2021春节7天,调休2天"2021-04-03","2021-04-04","2021-04-05",//2021清明节3天"2021-05-01","2021-05-02","2021-05-03","2021-05-04","2021-05-05",//2021劳动节5天,调休2天"2021-06-12","2021-06-13","2021-06-14",//2021端午节3天,调休1天"2021-09-19","2021-09-20","2021-09-21",//中秋节"2021-10-01","2021-10-02","2021-10-03","2021-10-04","2021-10-05","2021-10-06","2021-10-07"//2021中秋国庆连休7天,调休2天};for (int i = 0; i < workday.length; i++) {if (workday[i].equals(day)) {return true;}}for (int i = 0; i < holiday.length; i++) {if (holiday[i].equals(day)) {return false;}}int DayWeek = DateUtils.getWeekDay(day, "yyyy-MM-dd");if (DayWeek == 0 || DayWeek == 6) {return false;}return true;}//获取短时间去掉20public static String getShortCurrTime() {return  Tool.getTime("yyyyMMddHHmmss").substring(2);}//yyyymmdd转成yyyy-mm-ddpublic static String formatDate(String str){SimpleDateFormat sf1 = new SimpleDateFormat("yyyyMMdd");SimpleDateFormat sf2 =new SimpleDateFormat("yyyy-MM-dd");String sfstr = "";try {sfstr = sf2.format(sf1.parse(str));} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return sfstr;}/***字符串转换成固定时间格式*eg:yyyyMMddHHmmss 转化成 yyyy-MM-dd HH:mm:ss 或者HH:mm:ss 等等*str: 要转化的字符串  currentformat: 字符串当前格式 format:要转化的格式* @param str* @param currentformat* @param format* @return* create by haolp on 2016-11-01*/public static String formatDate(String str,String currentformat,String format){String strs="";try {if(StringUtil.isEmpty(str)){return strs; }SimpleDateFormat df =new SimpleDateFormat(currentformat);SimpleDateFormat sf =new SimpleDateFormat(format);Date date = df.parse(str);  strs=sf.format(date);} catch (Exception e) {// TODO: handle exceptionstrs="";}return strs;}/*** 完整一周:周日到周六*字符串转换成固定时间格式:根据当前时间计算上一周的起始日期*eg:yyyyMMddHHmmss 转化成 yyyy-MM-dd HH:mm:ss 或者HH:mm:ss 等等*str: 要转化的字符串  currentformat: 字符串当前格式 format:要转化的格式* @param str* @param currentformat* @param format* @return :JSONObject (key1=lastWeekIndex ;   key2=lastWeekEnd)* create by haolp on 2017-10-03*/public static JSONObject LastWeekBeginDate(String str,String currentformat,String format){JSONObject object = new JSONObject();object.put("lastWeekIndex","");object.put("lastWeekEnd","");try {if(StringUtil.isEmpty(str)){return object; }SimpleDateFormat df =new SimpleDateFormat(currentformat);Date date = df.parse(str);  //判断当前是星期几Calendar cal = Calendar.getInstance();cal.setTime(date);int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;String lastWeekIndex=DateUtils.btoMonthDate(date, -(week_index+7),0, format);//上周开始String lastWeekEnd=DateUtils.btoMonthDate(date, -(week_index+1),0, format);//上周结束object.put("lastWeekIndex",lastWeekIndex);object.put("lastWeekEnd",lastWeekEnd);} catch (Exception e) {// TODO: handle exception}return object;}/*** 完整一周:周一到周日*字符串转换成固定时间格式:根据当前时间计算上一周的起始日期*str: 要转化的字符串  format:日期格式* @param str* @param format* @return :JSONObject (key1=lastWeekIndex ;   key2=lastWeekEnd)*/public static JSONObject LastWeekDate(String str,String format){JSONObject object = new JSONObject();object.put("lastWeekIndex","");object.put("lastWeekEnd","");try {if(StringUtil.isEmpty(str)){return object; }SimpleDateFormat df = new SimpleDateFormat(format);Date date = df.parse(str);//判断当前是星期几Calendar cal = Calendar.getInstance();cal.setTime(date);int week_index = cal.get(Calendar.DAY_OF_WEEK)-1;String lastWeekIndex=DateUtils.btoMonthDate(date, -(week_index+6),0, format);//上周开始String lastWeekEnd=DateUtils.btoMonthDate(date, -week_index,0, format);//上周结束object.put("lastWeekIndex",lastWeekIndex);object.put("lastWeekEnd",lastWeekEnd);} catch (Exception e) {// TODO: handle exception}return object;}/*** 日期字符串转sql date* * @param str*            yyyy-mm-dd* @return*/public static java.sql.Date getSqlDate(String str) {java.sql.Date date = java.sql.Date.valueOf(str);return date;}/*** 日期字符串转sql Timestamp* * @param str*            yyyy-mm-dd hh:mm:ss* @return*/public static java.sql.Timestamp getSqlTimestamp(String str) {java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf(str);return timestamp;}/*** sql date转日期字符串* * @param date* @return yyyy-MM-dd*/public static String getSqlDateStr(java.sql.Date date) {String dateStr = date.toString();return dateStr;}/*** sql Timestamp转时间字符串* * @param timestamp* @return yyyy-MM-dd HH:mm:ss*/public static String getSqlTimestampStr(java.sql.Timestamp timestamp) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String timestampStr = df.format(timestamp);return timestampStr;}/** * 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串 *  * @author lzx on 2017-09-08 */  public static boolean isValidDate(String str) {  try {  if (str != null && !str.equals("")) {  if (str.length() == 8) {  // 闰年标志  boolean isLeapYear = false;  String year = str.substring(0, 4);  String month = str.substring(4, 6);  String day = str.substring(6, 8);  int vYear = Integer.parseInt(year);  // 判断年份是否合法  if (vYear < 1900 || vYear > 2200) {  return false;  }  // 判断是否为闰年  if (vYear % 4 == 0 && vYear % 100 != 0 || vYear % 400 == 0) {  isLeapYear = true;  }  // 判断月份  // 1.判断月份  if (month.startsWith("0")) {  String units4Month = month.substring(1, 2);  int vUnits4Month = Integer.parseInt(units4Month);  if (vUnits4Month == 0) {  return false;  }  if (vUnits4Month == 2) {  // 获取2月的天数  int vDays4February = Integer.parseInt(day);  if (isLeapYear) {  if (vDays4February > 29)  return false;  } else {  if (vDays4February > 28)  return false;  }  }  } else {  // 2.判断非0打头的月份是否合法  int vMonth = Integer.parseInt(month);  if (vMonth != 10 && vMonth != 11 && vMonth != 12) {  return false;  }  }  // 判断日期  // 1.判断日期  if (day.startsWith("0")) {  String units4Day = day.substring(1, 2);  int vUnits4Day = Integer.parseInt(units4Day);  if (vUnits4Day == 0) {  return false;  }  } else {  // 2.判断非0打头的日期是否合法  int vDay = Integer.parseInt(day);  if (vDay < 10 || vDay > 31) {  return false;  }  }  return true;  } else {  return false;  }  } else {  return false;  }  } catch (Exception e) {  // TODO Auto-generated catch block  e.printStackTrace();  return false;  }  }/*** 给定的时间end_day,给定的结算周期T,返回未结算的开始日期* @param T    时间周期* @param end_day 截止日期  格式yyyy-MM-dd * @return* @author luomy on 2018-04-26*/public static String periodBeginDay(int T, String end_day){String begin_day = end_day;try {//t=T时结束循环for (int t = 1; t <= T; t++) {Date begin_date = DateUtils.stringToDate(begin_day);//结束时间向前每次推一天,当是工作日时退出循环int i = 1;while(i <= 20){begin_day = DateUtils.dayToString(DateUtils.btoEDate(begin_date, -i));if(DateUtils.isWorkday(begin_day)){break;}i++;}}} catch (Exception e) {e.printStackTrace();}return begin_day;}/*** 获取beginDate开始的日期到endDate连续的月份* * @param beginDate* @param endDate* @author lzx on 2018-05-21*/public static List<String> getMonthList(String beginDate, String endDate) {List<String> listDate = new ArrayList<String>();Date sDate = getDateBy(beginDate);Date eDate = getDateBy(endDate);// 将时间格式化为YYYY-MM-DDDateFormat dateformat = new SimpleDateFormat("yyyyMM");while (!sDate.after(eDate)) {listDate.add(dateformat.format(sDate));sDate = getDateBy(btoMonthDate(sDate, 0, 1, "yyyy-MM-dd HH:mm:ss").substring(0, 7) + "-01 00:00:00");}return listDate;}//   /**
//   * 判断是否为基准时间近三天
//   * @param end 基准时间
//   * @param dateString 待判断时间,yyyy-MM-dd
//   * @return
//   */
//  public static boolean isNearly3Ds(Date end, String dateString){
//      Date begin = btoEDate(end, -3);
//      List<String> list = new ArrayList<String>();
//      DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
//      while (!begin.after(end)) {
//          list.add(dateformat.format(begin));
//          begin = btoEDate(begin, 1);
//      }
//      if (list.contains(dateString)) {
//          return true;
//      } else {
//          return false;
//      }
//  }/*** 判断是否为基准时间近1天* @param end 基准时间* @param dateString 待判断时间,yyyy-MM-dd* @return*/public static boolean isNearlyDays(Date end, String dateString){Date begin = btoEDate(end, -1);List<String> list = new ArrayList<String>();DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");while (!begin.after(end)) {list.add(dateformat.format(begin));begin = btoEDate(begin, 1);}if (list.contains(dateString)) {return true;} else {return false;}}/*** 获取beginDate开始的日期到endDate连续的日期天数* @param beginDate* @param endDate* @return*/public static int getDayDiff(String beginDate,String endDate) {Date sDate = getDateBy(beginDate);Date eDate = getDateBy(endDate);int day = 0;// 将时间格式化为YYYY-MM-DD
//      DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");while (!sDate.after(eDate)) {
//          listDate.add(dateformat.format(sDate));day ++;sDate = btoEDate(sDate, 1);}return day;}/*** 解析rfc3339标准格式 yyyy-MM-dd'T'HH:mm:ssXXX TO  yyyy-MM-dd HH:mm:ss* @param time 时间字符串* @return*/public static String parseFRC3339(String timeStr) {try {SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.SIMPLIFIED_CHINESE);// 输入的被转化的时间格式SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 需要转化成的时间格式Date date1 = dff.parse(timeStr);return df1.format(date1);} catch (ParseException e) {e.printStackTrace();}return timeStr;}/*** 获取rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss:sss表示时分秒毫秒,TIMEZONE表示时区* @param time 时间字符串* @return*/public static String getFRC3339(String timeStr) {return formatDate(timeStr, "yyyy-MM-dd HH:mm:ss","yyyy-MM-dd'T'HH:mm:ssXXX");}/*** 将时间yyyy-MM-dd HH:mm:ss 转换为时间戳* @param s yyyy-MM-dd HH:mm:ss* @return* @throws ParseException*/public static String dateToStamp(String s) {String res = "";try {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = simpleDateFormat.parse(s);long ts = date.getTime();res = String.valueOf(ts);} catch (ParseException e) {}return res;}public static DateTime getDateTime(String time, String format){DateTimeFormatter formatter = DateTimeFormat.forPattern(format);return DateTime.parse(DateUtils.getCurrTime(),formatter);}private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");public static Date getMinDateMonth(String month){try {Date nowDate = sdf.parse(month);Calendar calendar = Calendar.getInstance();calendar.setTime(nowDate);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));return calendar.getTime();} catch (ParseException e) {e.printStackTrace();}return null;}public static Date getMaxDateMonth(String month){try {Date nowDate = sdf.parse(month);Calendar calendar = Calendar.getInstance();calendar.setTime(nowDate);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));return calendar.getTime();} catch (ParseException e) {e.printStackTrace();}return null;}public static Date getNextMonth(String month) {try {Date nowDate = sdf.parse(month);Calendar calendar = Calendar.getInstance();calendar.setTime(nowDate);calendar.add(Calendar.MONTH, 1);//增加一个月return calendar.getTime();} catch (ParseException e) {e.printStackTrace();}return null;}public static List<String[]> getDateSplitMonth(String start, String end){List<String[]> list = new ArrayList<>();String[] splitStartDate = start.split("-");String[] splitEndDate = end.split("-");int year = Integer.valueOf(splitEndDate[0])-Integer.valueOf(splitStartDate[0]);int diffMonth = year*12+Integer.valueOf(splitEndDate[1])-Integer.valueOf(splitStartDate[1]);if(diffMonth==0){String[] between = new String[]{splitStartDate[0]+splitStartDate[1],start,end};list.add(between);}if(diffMonth==1){String maxDate = dateToString(getMaxDateMonth(splitStartDate[0]+splitStartDate[1]));String minDate = dateToString(getMinDateMonth(splitEndDate[0]+splitEndDate[1]));String[] between1 = new String[]{splitStartDate[0]+splitStartDate[1],start,maxDate};String[] between2 = new String[]{splitEndDate[0]+splitEndDate[1],minDate,end};list.add(between1);list.add(between2);}if(diffMonth==2){String endDate1 = dateToString(getMaxDateMonth(splitStartDate[0]+splitStartDate[1]));String month2 = sdf.format(getNextMonth(splitStartDate[0]+splitStartDate[1]));String startDate2 = dateToString(getMinDateMonth(month2));String endDate2 = dateToString(getMaxDateMonth(month2));String startDate3 = dateToString(getMinDateMonth(splitEndDate[0]+splitEndDate[1]));String[] between1 = new String[]{splitStartDate[0]+splitStartDate[1],start,endDate1};String[] between2 = new String[]{month2,startDate2,endDate2};String[] between3 = new String[]{splitEndDate[0]+splitEndDate[1],startDate3,end};list.add(between1);list.add(between2);list.add(between3);}return list;}}

DateUtils 工具类:获取指定月份第一天时间,最后一天时间相关推荐

  1. Java获取指定月份第一周第一天

    Java获取指定月份第一周第一天 思路: 1.获取当前月份第一天 2.获取第一天对应周几 3.根据周几减去对应天数得到指定日期 @Testpublic void test2(){Date lastWe ...

  2. php 获取月份第一天和最后一天,php 获取指定月第一天和最后一天

    本文章给大家介绍在php 中利用date和strtotime函数获取用户给定时间的第一天或文章最后一天,有需要了解学习的朋友可进入参考. 借助于date和strtotime函数,可以轻松的获取本月.下 ...

  3. 使用Calendar类获取指定日期所在年/月份、周第一天、最后一天

    最近做项目有涉及需要获取指定日期或当前日期所在月份和周第一和最后一天,结合网上的资料和自己项目开发记录,记录下用到的这些方法. 目录 1.获取指定年份的第一天和最后一天 2. 获取指定日期月份第一天和 ...

  4. Java获取指定月份的最后一天

    https://blog.csdn.net/itmyhome1990/article/details/85619804 Java获取指定月份的最后一天 麦田 2019-01-02 17:43:38   ...

  5. Calendar获取日期所在周、月份第一天、最后一天以及前一周内所有时间

    目录 前言 1.获取指定日期所在周的第一天和最后一天 2.获取指定日期所在月份的第一天和最后一天 3.获取指定日期前一周所有时间 前言 项目中经常使用到获取日期所在当前周.月份第一天.最后一天以及指定 ...

  6. java工具类获取文件扩展名与content-type、http与content-type映射关系

    java工具类获取文件扩展名与content-type.http与content-type映射关系 大家好,我是酷酷的韩~ 一.对应关系参考地址: http://doc.chacuo.net/cont ...

  7. JAVA 获取指定月份的每周的开始日期和结束日期

    1.第一种情况,从1号开始到月份最后一天结束 代码如下: private DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPatte ...

  8. Java获取指定年月的开始时间和结束时间

    文章目录 Java获取指定年月的开始时间和结束时间 Java获取指定年月的开始时间和结束时间 // 获取指定年指定月的开始天数和结束天数public static Map<String,Date ...

  9. Java 获取某年的第一天和最后一天

    在统计的数据是时候,要统计某年的数据.开始时间是某年的第一天,结束时间是某年的最后一天.该如何获取某年的第一天和最后一天: 获取当年的第一天和最后一天 private static String da ...

最新文章

  1. Eclipse 启动Tomcat 超时报错的解决方案
  2. windows7如何打开远程桌面nbsp;-…
  3. linux 内核网络协议栈--IP层开始直到包被处理(三)
  4. WPF中Expander与ListBox(ItemsControl)嵌套中的问题
  5. 算法—详细讲解单向链表的实现(python)
  6. 密码编码学之AES及其工作模式详解
  7. 201521123083《Java程序设计》第11周学习总结
  8. 51单片机开发软件keil4的安装(win10)
  9. 如何在官网上下载MySQL驱动--最新方法
  10. 股指期货开户的条件和流程
  11. STM32自学笔记-8-红外遥控
  12. 6.1 Verbatim环境
  13. 《生物信息学:导论与方法》--本体论、分子通路鉴定--听课笔记(十九)
  14. Window10 和 Ubuntu20.04 双系统安装
  15. Matlab中关于复杂函数二重积分的问题
  16. 踱步狼注释移除,状态机算法更新2019.10.16
  17. MySQL中如何定义一个自己写的函数
  18. ucenter与其它应用结合时出现通信失败,ucenter应用原理与调试
  19. WSL嵌入式开发系列教程 4 —— 安装VS code
  20. 容器和LXC简单命令

热门文章

  1. e-dialog出现额外多了一层遮罩
  2. 优秀的产品经理都在读什么?
  3. Java中的图形界面编程-GUI
  4. 如何查找SAP notes
  5. bzoj 3157: 国王奇遇记3516: 国王奇遇记加强版
  6. wr890n虚拟服务器,TP-Link TL-WR890N无线路由器的上网设置教程
  7. JDK1.8源码分析:阻塞队列LinkedBlockingQueue与BlockingDeque(双端)的设计与实现
  8. Docker常用命令使用详解(docker help、version、info、images)(一)
  9. linux用c实现pwd命令,linux pwd指令的C实现
  10. 软件测试实习生培训大纲