541 lines
14 KiB
Java
541 lines
14 KiB
Java
|
package com.zcloud.util;
|
|||
|
|
|||
|
import java.text.DateFormat;
|
|||
|
import java.text.ParseException;
|
|||
|
import java.text.SimpleDateFormat;
|
|||
|
import java.util.Calendar;
|
|||
|
import java.util.Date;
|
|||
|
|
|||
|
/**
|
|||
|
* 说明:日期处理(临时处理时间) 作者:zhangyue 官网:www.qdkjchina.com
|
|||
|
*/
|
|||
|
public class DateSysUtil {
|
|||
|
|
|||
|
private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
|
|||
|
private final static SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");
|
|||
|
private final static SimpleDateFormat sdfOnlyDay = new SimpleDateFormat("dd");
|
|||
|
private final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
|
|||
|
private final static SimpleDateFormat sdfMDay = new SimpleDateFormat("yyyy-M-d");
|
|||
|
private final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd");
|
|||
|
private final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|||
|
private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");
|
|||
|
|
|||
|
/**
|
|||
|
* 获取YYYY格式
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getSdfTimes() {
|
|||
|
return sdfTimes.format(new Date());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取YYYY格式
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getYear(int i) {
|
|||
|
Calendar c = Calendar.getInstance();
|
|||
|
c.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
return sdfYear.format(c.getTime());
|
|||
|
}
|
|||
|
|
|||
|
public static String getMonth(int i) {
|
|||
|
Calendar c = Calendar.getInstance();
|
|||
|
c.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
return sdfMonth.format(c.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取DD格式
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getOnlyDay(int i) {
|
|||
|
Calendar c = Calendar.getInstance();
|
|||
|
c.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
return sdfOnlyDay.format(c.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取YYYY-MM-DD格式
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getDay(int i) {
|
|||
|
Calendar c = Calendar.getInstance();
|
|||
|
c.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
return sdfDay.format(c.getTime());
|
|||
|
}
|
|||
|
|
|||
|
public static String MDay() {
|
|||
|
return sdfMDay.format(new Date());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取YYYYMMDD格式
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getDays() {
|
|||
|
return sdfDays.format(new Date());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取YYYY-MM-DD HH:mm:ss格式
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getTime() {
|
|||
|
return sdfTime.format(new Date());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @Title: compareDate
|
|||
|
* @Description: TODO(日期比较,如果s>=e 返回true 否则返回false)
|
|||
|
* @param s
|
|||
|
* @param e
|
|||
|
* @return boolean
|
|||
|
* @throws @author fh
|
|||
|
*/
|
|||
|
public static boolean compareDate(String s, String e) {
|
|||
|
if (fomatDate(s) == null || fomatDate(e) == null) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
return fomatDate(s).getTime() >= fomatDate(e).getTime();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 格式化日期
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static Date fomatDate(String date) {
|
|||
|
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
|
|||
|
try {
|
|||
|
return fmt.parse(date);
|
|||
|
} catch (ParseException e) {
|
|||
|
e.printStackTrace();
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 格式化日期
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static Date fomatDateTime(String date) {
|
|||
|
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|||
|
try {
|
|||
|
return fmt.parse(date);
|
|||
|
} catch (ParseException e) {
|
|||
|
e.printStackTrace();
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 校验日期是否合法
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static boolean isValidDate(String s) {
|
|||
|
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
|
|||
|
try {
|
|||
|
fmt.parse(s);
|
|||
|
return true;
|
|||
|
} catch (Exception e) {
|
|||
|
return false; // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @param startTime
|
|||
|
* @param endTime
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static int getDiffYear(String startTime, String endTime) {
|
|||
|
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
|
|||
|
try {
|
|||
|
int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(startTime).getTime()) / (1000 * 60 * 60 * 24))
|
|||
|
/ 365);
|
|||
|
return years;
|
|||
|
} catch (Exception e) {
|
|||
|
return 0; // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* <li>功能描述:时间相减得到天数
|
|||
|
*
|
|||
|
* @param beginDateStr
|
|||
|
* @param endDateStr
|
|||
|
* @return long
|
|||
|
* @author Administrator
|
|||
|
*/
|
|||
|
public static long getDaySub(String beginDateStr, String endDateStr) {
|
|||
|
long day = 0;
|
|||
|
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
|
|||
|
java.util.Date beginDate = null;
|
|||
|
java.util.Date endDate = null;
|
|||
|
try {
|
|||
|
beginDate = format.parse(beginDateStr);
|
|||
|
endDate = format.parse(endDateStr);
|
|||
|
} catch (ParseException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
|
|||
|
// System.out.println("相隔的天数="+day);
|
|||
|
return day;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 得到n天之后的日期
|
|||
|
*
|
|||
|
* @param days
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getAfterDayDate(String days) {
|
|||
|
int daysInt = Integer.parseInt(days);
|
|||
|
Calendar canlendar = Calendar.getInstance(); // java.util包
|
|||
|
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
|
|||
|
Date date = canlendar.getTime();
|
|||
|
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|||
|
String dateStr = sdfd.format(date);
|
|||
|
return dateStr;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 得到n天之后是周几
|
|||
|
*
|
|||
|
* @param days
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getAfterDayWeek(String days) {
|
|||
|
int daysInt = Integer.parseInt(days);
|
|||
|
Calendar canlendar = Calendar.getInstance(); // java.util包
|
|||
|
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
|
|||
|
Date date = canlendar.getTime();
|
|||
|
SimpleDateFormat sdf = new SimpleDateFormat("E");
|
|||
|
String dateStr = sdf.format(date);
|
|||
|
return dateStr;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 按照yyyy-MM-dd HH:mm:ss的格式,日期转字符串
|
|||
|
*
|
|||
|
* @param date
|
|||
|
* @return yyyy-MM-dd HH:mm:ss
|
|||
|
*/
|
|||
|
public static String date2Str(Date date) {
|
|||
|
return date2Str(date, "yyyy-MM-dd HH:mm:ss");
|
|||
|
}
|
|||
|
|
|||
|
public static String date3Str(Date date) {
|
|||
|
return date2Str(date, "yyyy-M-d");
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 按照yyyy-MM-dd HH:mm:ss的格式,字符串转日期
|
|||
|
*
|
|||
|
* @param date
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static Date str2Date(String date) {
|
|||
|
if (Tools.notEmpty(date)) {
|
|||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|||
|
try {
|
|||
|
return sdf.parse(date);
|
|||
|
} catch (ParseException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return new Date();
|
|||
|
} else {
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 把时间根据时、分、秒转换为时间段
|
|||
|
*
|
|||
|
* @param StrDate
|
|||
|
*/
|
|||
|
public static String getTimes(String StrDate) {
|
|||
|
String resultTimes = "";
|
|||
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|||
|
java.util.Date now;
|
|||
|
try {
|
|||
|
now = new Date();
|
|||
|
java.util.Date date = df.parse(StrDate);
|
|||
|
long times = now.getTime() - date.getTime();
|
|||
|
long day = times / (24 * 60 * 60 * 1000);
|
|||
|
long hour = (times / (60 * 60 * 1000) - day * 24);
|
|||
|
long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
|
|||
|
long sec = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
|
|||
|
|
|||
|
StringBuffer sb = new StringBuffer();
|
|||
|
// sb.append("发表于:");
|
|||
|
if (hour > 0) {
|
|||
|
sb.append(hour + "小时前");
|
|||
|
} else if (min > 0) {
|
|||
|
sb.append(min + "分钟前");
|
|||
|
} else {
|
|||
|
sb.append(sec + "秒前");
|
|||
|
}
|
|||
|
resultTimes = sb.toString();
|
|||
|
} catch (ParseException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return resultTimes;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 按照参数format的格式,日期转字符串
|
|||
|
*
|
|||
|
* @param date
|
|||
|
* @param format
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String date2Str(Date date, String format) {
|
|||
|
if (date != null) {
|
|||
|
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
|||
|
return sdf.format(date);
|
|||
|
} else {
|
|||
|
return "";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取当年的第一天
|
|||
|
*
|
|||
|
* @param year
|
|||
|
* @author zhangyue
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getCurrYearFirst(int i) {
|
|||
|
final Calendar cal = Calendar.getInstance();
|
|||
|
|
|||
|
cal.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
|
|||
|
final int last = cal.getActualMinimum(Calendar.DAY_OF_YEAR);
|
|||
|
|
|||
|
cal.set(Calendar.DAY_OF_YEAR, last);
|
|||
|
|
|||
|
return sdfDay.format(cal.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取当年的最后一天
|
|||
|
*
|
|||
|
* @param year
|
|||
|
* @author zhangyue
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getCurrYearLast(int i) {
|
|||
|
final Calendar cal = Calendar.getInstance();
|
|||
|
cal.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
|
|||
|
final int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
|
|||
|
|
|||
|
cal.set(Calendar.DAY_OF_YEAR, last);
|
|||
|
|
|||
|
return sdfDay.format(cal.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取当前季度第一天
|
|||
|
*
|
|||
|
* @author zhangyue
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String quarterStart(int i) {
|
|||
|
Date dBegin = new Date();
|
|||
|
Calendar calBegin = Calendar.getInstance();
|
|||
|
|
|||
|
calBegin.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
// calBegin.setTime(dBegin);
|
|||
|
int remainder = calBegin.get(Calendar.MONTH) % 3;
|
|||
|
int month = remainder != 0 ? calBegin.get(Calendar.MONTH) - remainder : calBegin.get(Calendar.MONTH);
|
|||
|
|
|||
|
calBegin.set(Calendar.MONTH, month);
|
|||
|
calBegin.set(Calendar.DAY_OF_MONTH, calBegin.getActualMinimum(Calendar.DAY_OF_MONTH));
|
|||
|
|
|||
|
calBegin.setTime(calBegin.getTime());
|
|||
|
return sdfDay.format(calBegin.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取当前季度最后一天
|
|||
|
*
|
|||
|
* @author zhangyue
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String quarterEnd(int i) {
|
|||
|
Date dEnd = new Date();
|
|||
|
Calendar calendar = Calendar.getInstance();
|
|||
|
|
|||
|
calendar.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
// calendar.setTime(dEnd);
|
|||
|
int remainder = (calendar.get(Calendar.MONTH) + 1) % 3;
|
|||
|
int month = remainder != 0 ? calendar.get(Calendar.MONTH) + (3 - remainder) : calendar.get(Calendar.MONTH);
|
|||
|
calendar.set(Calendar.MONTH, month);
|
|||
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
|||
|
calendar.setTime(calendar.getTime());
|
|||
|
return sdfDay.format(calendar.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取本月第一天日期
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getMonthFirstDay(int i) {
|
|||
|
/*
|
|||
|
* String date_str = "2019-02-15";
|
|||
|
*/
|
|||
|
|
|||
|
Calendar cale = Calendar.getInstance();
|
|||
|
|
|||
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|||
|
|
|||
|
// cale.setTime(formatter.parse(date_str));
|
|||
|
Calendar c = Calendar.getInstance();
|
|||
|
cale.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
|
|||
|
cale.add(Calendar.MONTH, 0);
|
|||
|
|
|||
|
cale.set(Calendar.DAY_OF_MONTH, 1);
|
|||
|
|
|||
|
String firstDayOfMonth = formatter.format(cale.getTime()); // 当月第一天 2019-02-01
|
|||
|
|
|||
|
/*
|
|||
|
* cale.add(Calendar.MONTH, 1);
|
|||
|
*
|
|||
|
* cale.set(Calendar.DAY_OF_MONTH, 0);
|
|||
|
*
|
|||
|
* String lastDayOfMonth = formatter.format(cale.getTime()); // 当月最后一天
|
|||
|
* 2019-02-28
|
|||
|
*/ return sdfDay.format(cale.getTime());
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取本月最后一天日期
|
|||
|
*
|
|||
|
* @return
|
|||
|
*/
|
|||
|
public static String getMonthEndDay(int i) {
|
|||
|
/*
|
|||
|
* String date_str = "2019-02-15";
|
|||
|
*/
|
|||
|
|
|||
|
Calendar cale = Calendar.getInstance();
|
|||
|
|
|||
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
|||
|
|
|||
|
// cale.setTime(formatter.parse(date_str));
|
|||
|
Calendar c = Calendar.getInstance();
|
|||
|
cale.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
|
|||
|
/*
|
|||
|
* cale.add(Calendar.MONTH, 0);
|
|||
|
*
|
|||
|
* cale.set(Calendar.DAY_OF_MONTH, 1);
|
|||
|
*
|
|||
|
* String firstDayOfMonth = formatter.format(cale.getTime()); // 当月第一天
|
|||
|
* 2019-02-01
|
|||
|
*/
|
|||
|
|
|||
|
cale.add(Calendar.MONTH, 1);
|
|||
|
|
|||
|
cale.set(Calendar.DAY_OF_MONTH, 0);
|
|||
|
|
|||
|
String lastDayOfMonth = formatter.format(cale.getTime()); // 当月最后一天 2019-02-28
|
|||
|
return sdfDay.format(cale.getTime());
|
|||
|
}
|
|||
|
|
|||
|
public static boolean timeCalendar(Date nowTime, Date amBeginTime, Date amEndTime) {
|
|||
|
// 设置当前时间
|
|||
|
Calendar date = Calendar.getInstance();
|
|||
|
date.setTime(nowTime);
|
|||
|
// 设置开始时间
|
|||
|
Calendar amBegin = Calendar.getInstance();
|
|||
|
amBegin.setTime(amBeginTime);// 上午开始时间
|
|||
|
// 设置结束时间
|
|||
|
Calendar amEnd = Calendar.getInstance();
|
|||
|
amEnd.setTime(amEndTime);// 上午结束时间
|
|||
|
// 处于开始时间之后,和结束时间之前的判断
|
|||
|
if ((date.after(amBegin) && date.before(amEnd))) {
|
|||
|
return true;
|
|||
|
} else {
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取本周的第一天
|
|||
|
*
|
|||
|
* @return String
|
|||
|
**/
|
|||
|
public static String getWeekStart(int i) {
|
|||
|
|
|||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
|
|||
|
Calendar cal = Calendar.getInstance();
|
|||
|
// Calendar c = Calendar.getInstance();
|
|||
|
cal.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
// cal.setTime(time);
|
|||
|
|
|||
|
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
|
|||
|
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
|
|||
|
if (1 == dayWeek) {
|
|||
|
cal.add(Calendar.DAY_OF_MONTH, -1);
|
|||
|
}
|
|||
|
|
|||
|
cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
|
|||
|
|
|||
|
int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
|
|||
|
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
|
|||
|
/*
|
|||
|
* cal.add(Calendar.DATE, 6);
|
|||
|
* System.out.println("所在周星期日的日期:"+sdf.format(cal.getTime()));
|
|||
|
*/
|
|||
|
|
|||
|
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 00:00:00";
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取本周的最后一天
|
|||
|
*
|
|||
|
* @return String
|
|||
|
**/
|
|||
|
public static String getWeekEnd(int i) {
|
|||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
|
|||
|
Calendar cal = Calendar.getInstance();
|
|||
|
// Calendar c = Calendar.getInstance();
|
|||
|
cal.add(Calendar.DAY_OF_MONTH, -i);
|
|||
|
// cal.setTime(time);
|
|||
|
|
|||
|
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
|
|||
|
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
|
|||
|
if (1 == dayWeek) {
|
|||
|
cal.add(Calendar.DAY_OF_MONTH, -1);
|
|||
|
}
|
|||
|
|
|||
|
cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
|
|||
|
|
|||
|
int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
|
|||
|
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
|
|||
|
|
|||
|
cal.add(Calendar.DATE, 6);
|
|||
|
|
|||
|
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 23:59:59";
|
|||
|
}
|
|||
|
|
|||
|
public static void main(String[] args) throws ParseException {
|
|||
|
System.out.println(getCurrYearLast(10));
|
|||
|
// System.out.println(getMonth(10));
|
|||
|
// System.out.println(getOnlyDay(10));
|
|||
|
}
|
|||
|
|
|||
|
}
|