java Date时间格式工具类DateUtil

package com.common;

import java.sql.Timestamp;

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.Iterator;

import java.util.LinkedHashMap;

import java.util.List;

/**

* 日期工具类

*/

public class DateUtil{

// ==格式到年==

/**

* 日期格式,年份,例如:2004,2008

*/

public static final String DATE_FORMAT_YYYY = "yyyy";

// ==格式到年月 ==

/**

* 日期格式,年份和月份,例如:200707,200808

*/

public static final String DATE_FORMAT_YYYYMM = "yyyyMM";

/**

* 日期格式,年份和月份,例如:200707,2008-08

*/

public static final String DATE_FORMAT_YYYY_MM = "yyyy-MM";

// ==格式到年月日==

/**

* 日期格式,年月日,例如:050630,080808

*/

public static final String DATE_FORMAT_YYMMDD = "yyMMdd";

/**

* 日期格式,年月日,用横杠分开,例如:06-12-25,08-08-08

*/

public static final String DATE_FORMAT_YY_MM_DD = "yy-MM-dd";

/**

* 日期格式,年月日,例如:20050630,20080808

*/

public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";

/**

* 日期格式,年月日,用横杠分开,例如:2006-12-25,2008-08-08

*/

public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";

/**

* 日期格式,年月日,例如:2016.10.05

*/

public static final String DATE_FORMAT_POINTYYYYMMDD = "yyyy.MM.dd";

/**

* 日期格式,年月日,例如:2016年10月05日

*/

public static final String DATE_TIME_FORMAT_YYYY年MM月DD日 = "yyyy年MM月dd日";

// ==格式到年月日 时分 ==

/**

* 日期格式,年月日时分,例如:200506301210,200808081210

*/

public static final String DATE_FORMAT_YYYYMMDDHHmm = "yyyyMMddHHmm";

/**

* 日期格式,年月日时分,例如:20001230 12:00,20080808 20:08

*/

public static final String DATE_TIME_FORMAT_YYYYMMDD_HH_MI = "yyyyMMdd HH:mm";

/**

* 日期格式,年月日时分,例如:2000-12-30 12:00,2008-08-08 20:08

*/

public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI = "yyyy-MM-dd HH:mm";

// ==格式到年月日 时分秒==

/**

* 日期格式,年月日时分秒,例如:20001230120000,20080808200808

*/

public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss";

/**

* 日期格式,年月日时分秒,年月日用横杠分开,时分秒用冒号分开

* 例如:2005-05-10 23:20:00,2008-08-08 20:08:08

*/

public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss";

// ==格式到年月日 时分秒 毫秒==

/**

* 日期格式,年月日时分秒毫秒,例如:20001230120000123,20080808200808456

*/

public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS = "yyyyMMddHHmmssSSS";

// ==特殊格式==

/**

* 日期格式,月日时分,例如:10-05 12:00

*/

public static final String DATE_FORMAT_MMDDHHMI = "MM-dd HH:mm";

/* ************工具方法*************** */

/**

* 获取某日期的年份

* @param date

* @return

*/

public static Integer getYear(Date date) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

return cal.get(Calendar.YEAR);

}

/**

* 获取某日期的月份

* @param date

* @return

*/

public static Integer getMonth(Date date) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

return cal.get(Calendar.MONTH) + 1;

}

/**

* 获取某日期的日数

* @param date

* @return

*/

public static Integer getDay(Date date){

Calendar cal = Calendar.getInstance();

cal.setTime(date);

int day=cal.get(Calendar.DATE);//获取日

return day;

}

/**

* 格式化Date时间

* @param time Date类型时间

* @param timeFromat String类型格式

* @return 格式化后的字符串

*/

public static String parseDateToStr(Date time, String timeFromat){

DateFormat dateFormat=new SimpleDateFormat(timeFromat);

return dateFormat.format(time);

}

/**

* 格式化Timestamp时间

* @param timestamp Timestamp类型时间

* @param timeFromat

* @return 格式化后的字符串

*/

public static String parseTimestampToStr(Timestamp timestamp,String timeFromat){

SimpleDateFormat df = new SimpleDateFormat(timeFromat);

return df.format(timestamp);

}

/**

* 格式化Date时间

* @param time Date类型时间

* @param timeFromat String类型格式

* @param defaultValue 默认值为当前时间Date

* @return 格式化后的字符串

*/

public static String parseDateToStr(Date time, String timeFromat, final Date defaultValue){

try{

DateFormat dateFormat=new SimpleDateFormat(timeFromat);

return dateFormat.format(time);

}catch (Exception e){

if(defaultValue!=null)

return parseDateToStr(defaultValue, timeFromat);

else

return parseDateToStr(new Date(), timeFromat);

}

}

/**

* 格式化Date时间

* @param time Date类型时间

* @param timeFromat String类型格式

* @param defaultValue 默认时间值String类型

* @return 格式化后的字符串

*/

public static String parseDateToStr(Date time, String timeFromat, final String defaultValue){

try{

DateFormat dateFormat=new SimpleDateFormat(timeFromat);

return dateFormat.format(time);

}catch (Exception e){

return defaultValue;

}

}

/**

* 格式化String时间

* @param time String类型时间

* @param timeFromat String类型格式

* @return 格式化后的Date日期

*/

public static Date parseStrToDate(String time, String timeFromat) {

if (time == null || time.equals("")) {

return null;

}

Date date=null;

try{

DateFormat dateFormat=new SimpleDateFormat(timeFromat);

date=dateFormat.parse(time);

}catch(Exception e){

}

return date;

}

/**

* 格式化String时间

* @param strTime String类型时间

* @param timeFromat String类型格式

* @param defaultValue 异常时返回的默认值

* @return

*/

public static Date parseStrToDate(String strTime, String timeFromat,

Date defaultValue) {

try {

DateFormat dateFormat = new SimpleDateFormat(timeFromat);

return dateFormat.parse(strTime);

} catch (Exception e) {

return defaultValue;

}

}

/**

* 当strTime为2008-9时返回为2008-9-1 00:00格式日期时间,无法转换返回null.

* @param strTime

* @return

*/

public static Date strToDate(String strTime) {

if(strTime==null || strTime.trim().length()<=0)

return null;

Date date = null;

List<String> list = new ArrayList<String>(0);

list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);

list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS);

list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI);

list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI);

list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS);

list.add(DATE_FORMAT_YYYY_MM_DD);

//list.add(DATE_FORMAT_YY_MM_DD);

list.add(DATE_FORMAT_YYYYMMDD);

list.add(DATE_FORMAT_YYYY_MM);

list.add(DATE_FORMAT_YYYYMM);

list.add(DATE_FORMAT_YYYY);

for (Iterator iter = list.iterator(); iter.hasNext();) {

String format = (String) iter.next();

if(strTime.indexOf("-")>0 && format.indexOf("-")<0)

continue;

if(strTime.indexOf("-")<0 && format.indexOf("-")>0)

continue;

if(strTime.length()>format.length())

continue;

date = parseStrToDate(strTime, format);

if (date != null)

break;

}

return date;

}

/**

* 解析两个日期之间的所有月份

* @param beginDateStr 开始日期,至少精确到yyyy-MM

* @param endDateStr 结束日期,至少精确到yyyy-MM

* @return yyyy-MM日期集合

*/

public static List<String> getMonthListOfDate(String beginDateStr, String endDateStr) {

// 指定要解析的时间格式

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM");

// 返回的月份列表

String sRet = "";

// 定义一些变量

Date beginDate = null;

Date endDate = null;

GregorianCalendar beginGC = null;

GregorianCalendar endGC = null;

List<String> list = new ArrayList<String>();

try {

// 将字符串parse成日期

beginDate = f.parse(beginDateStr);

endDate = f.parse(endDateStr);

// 设置日历

beginGC = new GregorianCalendar();

beginGC.setTime(beginDate);

endGC = new GregorianCalendar();

endGC.setTime(endDate);

// 直到两个时间相同

while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {

sRet = beginGC.get(Calendar.YEAR) + "-"

+ (beginGC.get(Calendar.MONTH) + 1);

list.add(sRet);

// 以月为单位,增加时间

beginGC.add(Calendar.MONTH, 1);

}

return list;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/**

* 解析两个日期段之间的所有日期

* @param beginDateStr 开始日期 ,至少精确到yyyy-MM-dd

* @param endDateStr 结束日期 ,至少精确到yyyy-MM-dd

* @return yyyy-MM-dd日期集合

*/

public static List<String> getDayListOfDate(String beginDateStr, String endDateStr) {

// 指定要解析的时间格式

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");

// 定义一些变量

Date beginDate = null;

Date endDate = null;

Calendar beginGC = null;

Calendar endGC = null;

List<String> list = new ArrayList<String>();

try {

// 将字符串parse成日期

beginDate = f.parse(beginDateStr);

endDate = f.parse(endDateStr);

// 设置日历

beginGC = Calendar.getInstance();

beginGC.setTime(beginDate);

endGC = Calendar.getInstance();

endGC.setTime(endDate);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

// 直到两个时间相同

while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {

list.add(sdf.format(beginGC.getTime()));

// 以日为单位,增加时间

beginGC.add(Calendar.DAY_OF_MONTH, 1);

}

return list;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/**

* 获取当下年份指定前后数量的年份集合

* @param before 当下年份前年数

* @param behind 当下年份后年数

* @return 集合

*/

public static List<Integer> getYearListOfYears(int before,int behind) {

if (before<0 || behind<0) {

return null;

}

List<Integer> list = new ArrayList<Integer>();

Calendar c = null;

c = Calendar.getInstance();

c.setTime(new Date());

int currYear = Calendar.getInstance().get(Calendar.YEAR);

int startYear = currYear - before;

int endYear = currYear + behind;

for (int i = startYear; i < endYear; i++) {

list.add(Integer.valueOf(i));

}

return list;

}

/**

* 获取当前日期是一年中第几周

* @param date

* @return

*/

public static Integer getWeekthOfYear(Date date) {

Calendar c = new GregorianCalendar();

c.setFirstDayOfWeek(Calendar.MONDAY);

c.setMinimalDaysInFirstWeek(7);

c.setTime(date);

return c.get(Calendar.WEEK_OF_YEAR);

}

/**

* 获取某一年各星期的始终时间

* 实例:getWeekList(2016),第52周(从2016-12-26至2017-01-01)

* @param 年份

* @return

*/

public static HashMap<Integer,String> getWeekTimeOfYear(int year) {

HashMap<Integer,String> map = new LinkedHashMap<Integer,String>();

Calendar c = new GregorianCalendar();

c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

int count = getWeekthOfYear(c.getTime());

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

String dayOfWeekStart = "";

String dayOfWeekEnd = "";

for (int i = 1; i <= count; i++) {

dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i));

dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i));

map.put(Integer.valueOf(i), "第"+i+"周(从"+dayOfWeekStart + "至" + dayOfWeekEnd+")");

}

return map;

}

/**

* 获取某一年的总周数

* @param year

* @return

*/

public static Integer getWeekCountOfYear(int year){

Calendar c = new GregorianCalendar();

c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

int count = getWeekthOfYear(c.getTime());

return count;

}

/**

* 获取指定日期所在周的第一天

* @param date

* @return

*/

public static Date getFirstDayOfWeek(Date date) {

Calendar c = new GregorianCalendar();

c.setFirstDayOfWeek(Calendar.MONDAY);

c.setTime(date);

c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday

return c.getTime();

}

/**

* 获取指定日期所在周的最后一天

* @param date

* @return

*/

public static Date getLastDayOfWeek(Date date) {

Calendar c = new GregorianCalendar();

c.setFirstDayOfWeek(Calendar.MONDAY);

c.setTime(date);

c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday

return c.getTime();

}

/**

* 获取某年某周的第一天

* @param year 目标年份

* @param week 目标周数

* @return

*/

public static Date getFirstDayOfWeek(int year, int week) {

Calendar c = new GregorianCalendar();

c.set(Calendar.YEAR, year);

c.set(Calendar.MONTH, Calendar.JANUARY);

c.set(Calendar.DATE, 1);

Calendar cal = (GregorianCalendar) c.clone();

cal.add(Calendar.DATE, week * 7);

return getFirstDayOfWeek(cal.getTime());

}

/**

* 获取某年某周的最后一天

* @param year 目标年份

* @param week 目标周数

* @return

*/

public static Date getLastDayOfWeek(int year, int week) {

Calendar c = new GregorianCalendar();

c.set(Calendar.YEAR, year);

c.set(Calendar.MONTH, Calendar.JANUARY);

c.set(Calendar.DATE, 1);

Calendar cal = (GregorianCalendar) c.clone();

cal.add(Calendar.DATE, week * 7);

return getLastDayOfWeek(cal.getTime());

}

/**

* 获取某年某月的第一天

* @param year 目标年份

* @param month 目标月份

* @return

*/

public static Date getFirstDayOfMonth(int year,int month){

month = month-1;

Calendar c = Calendar.getInstance();

c.set(Calendar.YEAR, year);

c.set(Calendar.MONTH, month);

int day = c.getActualMinimum(c.DAY_OF_MONTH);

c.set(Calendar.DAY_OF_MONTH, day);

c.set(Calendar.HOUR_OF_DAY, 0);

c.set(Calendar.MINUTE, 0);

c.set(Calendar.SECOND, 0);

c.set(Calendar.MILLISECOND, 0);

return c.getTime();

}

/**

* 获取某年某月的最后一天

* @param year 目标年份

* @param month 目标月份

* @return

*/

public static Date getLastDayOfMonth(int year,int month){

month = month-1;

Calendar c = Calendar.getInstance();

c.set(Calendar.YEAR, year);

c.set(Calendar.MONTH, month);

int day = c.getActualMaximum(c.DAY_OF_MONTH);

c.set(Calendar.DAY_OF_MONTH, day);

c.set(Calendar.HOUR_OF_DAY, 23);

c.set(Calendar.MINUTE, 59);

c.set(Calendar.SECOND, 59);

c.set(Calendar.MILLISECOND, 999);

return c.getTime();

}

/**

* 获取某个日期为星期几

* @param date

* @return String "星期*"

*/

public static String getDayWeekOfDate1(Date date) {

String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};

Calendar cal = Calendar.getInstance();

cal.setTime(date);

int w = cal.get(Calendar.DAY_OF_WEEK) - 1;

if (w < 0)

w = 0;

return weekDays[w];

}

/**

* 获得指定日期的星期几数

* @param date

* @return int

*/

public static Integer getDayWeekOfDate2(Date date){

Calendar aCalendar = Calendar.getInstance();

aCalendar.setTime(date);

int weekDay = aCalendar.get(Calendar.DAY_OF_WEEK);

return weekDay;

}

/**

* 验证字符串是否为日期

* 验证格式:YYYYMMDD、YYYY_MM_DD、YYYYMMDDHHMISS、YYYYMMDD_HH_MI、YYYY_MM_DD_HH_MI、YYYYMMDDHHMISSSSS、YYYY_MM_DD_HH_MI_SS

* @param strTime

* @return null时返回false;true为日期,false不为日期

*/

public static boolean validateIsDate(String strTime) {

if (strTime == null || strTime.trim().length() <= 0)

return false;

Date date = null;

List<String> list = new ArrayList<String>(0);

list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);

list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS);

list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI);

list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI);

list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS);

list.add(DATE_FORMAT_YYYY_MM_DD);

//list.add(DATE_FORMAT_YY_MM_DD);

list.add(DATE_FORMAT_YYYYMMDD);

//list.add(DATE_FORMAT_YYYY_MM);

//list.add(DATE_FORMAT_YYYYMM);

//list.add(DATE_FORMAT_YYYY);

for (Iterator iter = list.iterator(); iter.hasNext();) {

String format = (String) iter.next();

if(strTime.indexOf("-")>0 && format.indexOf("-")<0)

continue;

if(strTime.indexOf("-")<0 && format.indexOf("-")>0)

continue;

if(strTime.length()>format.length())

continue;

date = parseStrToDate(strTime.trim(), format);

if (date != null)

break;

}

if (date != null) {

System.out.println("生成的日期:"+DateUtil.parseDateToStr(date, DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS, "--null--"));

return true;

}

return false;

}

/**

* 将指定日期的时分秒格式为零

* @param date

* @return

*/

public static Date formatHhMmSsOfDate(Date date) {

Calendar cal = Calendar.getInstance();

cal.setTime(date);

cal.set(Calendar.HOUR_OF_DAY, 0);

cal.set(Calendar.MINUTE, 0);

cal.set(Calendar.SECOND, 0);

cal.set(Calendar.MILLISECOND, 0);

return cal.getTime();

}

/**

* 获得指定时间加减参数后的日期(不计算则输入0)

* @param date 指定日期

* @param year 年数,可正可负

* @param month 月数,可正可负

* @param day 天数,可正可负

* @param hour 小时数,可正可负

* @param minute 分钟数,可正可负

* @param second 秒数,可正可负

* @param millisecond 毫秒数,可正可负

* @return 计算后的日期

*/

public static Date addDate(Date date,int year,int month,int day,int hour,int minute,int second,int millisecond){

Calendar c = Calendar.getInstance();

c.setTime(date);

c.add(Calendar.YEAR, year);//加减年数

c.add(Calendar.MONTH, month);//加减月数

c.add(Calendar.DATE, day);//加减天数

c.add(Calendar.HOUR,hour);//加减小时数

c.add(Calendar.MINUTE, minute);//加减分钟数

c.add(Calendar.SECOND, second);//加减秒

c.add(Calendar.MILLISECOND, millisecond);//加减毫秒数

return c.getTime();

}

/**

* 获得两个日期的时间戳之差

* @param startDate

* @param endDate

* @return

*/

public static Long getDistanceTimestamp(Date startDate,Date endDate){

long daysBetween=(endDate.getTime()-startDate.getTime()+1000000)/(3600*24*1000);

return daysBetween;

}

/**

* 判断二个时间是否为同年同月

* @param date1

* @param date2

* @return

*/

public static Boolean compareIsSameMonth(Date date1,Date date2){

boolean flag = false;

int year1 = getYear(date1);

int year2 = getYear(date2);

if(year1 == year2){

int month1 = getMonth(date1);

int month2 = getMonth(date2);

if(month1 == month2)flag = true;

}

return flag;

}

/**

* 获得两个时间相差距离多少天多少小时多少分多少秒

* @param str1 时间参数 1 格式:1990-01-01 12:00:00

* @param str2 时间参数 2 格式:2009-01-01 12:00:00

* @return long[] 返回值为:{天, 时, 分, 秒}

*/

public static long[] getDistanceTime(Date one, Date two) {

long day = 0;

long hour = 0;

long min = 0;

long sec = 0;

try {

long time1 = one.getTime();

long time2 = two.getTime();

long diff ;

if(time1<time2) {

diff = time2 - time1;

} else {

diff = time1 - time2;

}

day = diff / (24 * 60 * 60 * 1000);

hour = (diff / (60 * 60 * 1000) - day * 24);

min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);

sec = (diff/1000-day*24*60*60-hour*60*60-min*60);

} catch (Exception e) {

e.printStackTrace();

}

long[] times = {day, hour, min, sec};

return times;

}

/**

* 两个时间相差距离多少天多少小时多少分多少秒

* @param str1 时间参数 1 格式:1990-01-01 12:00:00

* @param str2 时间参数 2 格式:2009-01-01 12:00:00

* @return String 返回值为:{天, 时, 分, 秒}

*/

public static long[] getDistanceTime(String str1, String str2) {

DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);

Date one;

Date two;

long day = 0;

long hour = 0;

long min = 0;

long sec = 0;

try {

one = df.parse(str1);

two = df.parse(str2);

long time1 = one.getTime();

long time2 = two.getTime();

long diff ;

if(time1<time2) {

diff = time2 - time1;

} else {

diff = time1 - time2;

}

day = diff / (24 * 60 * 60 * 1000);

hour = (diff / (60 * 60 * 1000) - day * 24);

min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);

sec = (diff/1000-day*24*60*60-hour*60*60-min*60);

} catch (ParseException e) {

e.printStackTrace();

}

long[] times = {day, hour, min, sec};

return times;

}

/**

* 两个时间之间相差距离多少天

* @param one 时间参数 1:

* @param two 时间参数 2:

* @return 相差天数

*/

public static Long getDistanceDays(String str1, String str2) throws Exception{

DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);

Date one;

Date two;

long days=0;

try {

one = df.parse(str1);

two = df.parse(str2);

long time1 = one.getTime();

long time2 = two.getTime();

long diff ;

if(time1<time2) {

diff = time2 - time1;

} else {

diff = time1 - time2;

}

days = diff / (1000 * 60 * 60 * 24);

} catch (ParseException e) {

e.printStackTrace();

}

return days;

}

/**

* 获取指定时间的那天 00:00:00.000 的时间

* @param date

* @return

*/

public static Date getDayBeginTime(final Date date) {

Calendar c = Calendar.getInstance();

c.setTime(date);

c.set(Calendar.HOUR_OF_DAY, 0);

c.set(Calendar.MINUTE, 0);

c.set(Calendar.SECOND, 0);

c.set(Calendar.MILLISECOND, 0);

return c.getTime();

}

/**

* 获取指定时间的那天 23:59:59.999 的时间

* @param date

* @return

*/

public static Date getDayEndTime(final Date date) {

Calendar c = Calendar.getInstance();

c.setTime(date);

c.set(Calendar.HOUR_OF_DAY, 23);

c.set(Calendar.MINUTE, 59);

c.set(Calendar.SECOND, 59);

c.set(Calendar.MILLISECOND, 999);

return c.getTime();

}

public static void main(String [] args){

try {

DateUtil dateUtil = new DateUtil();

System.out.println();

} catch (Exception e) {

// TODO: handle exception

}

}

小白一枚,勤于整理,多多指教。

转载链接:https://blog.csdn.net/w410589502/article/details/54342192