日期工具类
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.map.HashedMap;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalField;
import java.time.temporal.WeekFields;
import java.util.;
public class DateAndLocalDateUtil {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat sdf2 = new SimpleDateFormat("MM-dd");
/**
* localDate转Date
*/
public static Date localDate2Date(LocalDate localDate) {
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
Instant instant1 = zonedDateTime.toInstant();
Date from = Date.from(instant1);
return from;
}
/**
* LocalDateTime转换为Date
*
* @param localDateTime
*/
public static Date localDateTime2Date(LocalDateTime localDateTime) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);//Combines this date-time with a time-zone to create a ZonedDateTime.
Date date = Date.from(zdt.toInstant());
return date;
}
/**
* Date 转 localDate
*/
public static LocalDate date2LocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate localDate = zdt.toLocalDate();
return localDate;
}
//获取月第一天
public static Date getStartDayOfMonth(String date) {
LocalDate now = LocalDate.parse(date);
return getStartDayOfMonth(now);
}
public static Date getStartDayOfMonth(LocalDate date) {
LocalDate now = date.with(TemporalAdjusters.firstDayOfMonth());
return localDate2Date(now);
}
public static Date getStartDayOfMonth() {
return getStartDayOfMonth(LocalDate.now());
}
//获取月最后一天
public static Date getEndDayOfMonth(String date) {
LocalDate localDate = LocalDate.parse(date);
return getEndDayOfMonth(localDate);
}
public static Date getEndDayOfMonth(Date date) {
return getEndDayOfMonth(date2LocalDate(date));
}
public static Date getEndDayOfMonth(LocalDate date) {
LocalDate now = date.with(TemporalAdjusters.lastDayOfMonth());
Date.from(now.atStartOfDay(ZoneId.systemDefault()).plusDays(1L).minusNanos(1L).toInstant());
return localDate2Date(now);
}
public static Date getEndDayOfMonth() {
return getEndDayOfMonth(LocalDate.now());
}
//获取周第一天
public static Date getStartDayOfWeek(String date) {
LocalDate now = LocalDate.parse(date);
return getStartDayOfWeek(now);
}
public static Date getStartDayOfWeek(TemporalAccessor date) {
TemporalField fieldISO = WeekFields.of(Locale.CHINA).dayOfWeek();
LocalDate localDate = LocalDate.from(date);
localDate = localDate.with(fieldISO, 1);
return localDate2Date(localDate);
}
//获取周最后一天
public static Date getEndDayOfWeek(String date) {
LocalDate localDate = LocalDate.parse(date);
return getEndDayOfWeek(localDate);
}
public static Date getEndDayOfWeek(TemporalAccessor date) {
TemporalField fieldISO = WeekFields.of(Locale.CHINA).dayOfWeek();
LocalDate localDate = LocalDate.from(date);
localDate = localDate.with(fieldISO, 7);
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).plusDays(1L).minusNanos(1L).toInstant());
}
//一天的开始
public static LocalDateTime getStartOfDay(LocalDate date) {
LocalDateTime time = LocalDateTime.of(date, LocalTime.MIN);
return time;
}
public static LocalDateTime getStartOfDay() {
return getStartOfDay(LocalDate.now());
}
/**
* 一天的结束
*/
public static LocalDateTime getEndOfDay(LocalDate date) {
LocalDateTime time = LocalDateTime.of(date, LocalTime.MAX);
return time;
}
public static LocalDateTime getEndOfDay() {
return getEndOfDay(LocalDate.now());
}
/**
* 获取本月第一天
*
* @return
*/
public static Date getMinMonthdate() {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
/**
* 获取本月最后一天
*
* @return
*/
public static Date getMaxMonthdate() {
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(new Date());
calendar2.set(Calendar.DAY_OF_MONTH, calendar2.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar2.getTime();
}
/**
* 获得近一年的开始时间和结束时间
*
* @return
*/
public static Map<String, String> getYearTRange() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String, String> condition = new HashedMap();
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
calendar.set(Calendar.HOUR_OF_DAY, 24);
condition.put("endDate", df.format(calendar.getTime()));
calendar.set(Calendar.HOUR_OF_DAY, -8640);
condition.put("startDate", df.format(calendar.getTime()));
return condition;
}
/**
* 获取最近一年的年份月份
*
* @return
*/
public static List<String> getInitMonthMapWithZero() {
List<String> list = new ArrayList<String>();
Calendar c = Calendar.getInstance();
for (int i = 0; i < 12; i++) {
int k = c.get(Calendar.YEAR);
int j = c.get(Calendar.MONTH) + 1 - i;
String date = "";
if (j >= 1) {
date = k + "-" + (j >= 10 ? "" : "0") + j;
} else {
int p = 11 - i;//剩余循环次数
int m = c.get(Calendar.YEAR) - 1;
int n = c.get(Calendar.MONTH) + 2 + p;
date = m + "-" + (n >= 10 ? "" : "0") + n;
}
list.add(date);
}
return list;
}
/**
* 获取今年一年的年份月份
*
* @return
*/
public static List<String> getInitMonthsMapWithZero() {
List<String> list = new ArrayList<String>();
Calendar c = Calendar.getInstance();
for (int i = c.get(Calendar.MONTH) ; i >= 0; i--) {
int k = c.get(Calendar.YEAR);
int j = c.get(Calendar.MONTH) + 1 - i;
String date = "";
if (j >= 1) {
date = k + "-" + (j >= 10 ? "" : "0") + j;
}
list.add(date);
}
// for (int i = 0; i < (c.get(Calendar.MONTH) + 1); i++) {
// int k = c.get(Calendar.YEAR);
// int j = c.get(Calendar.MONTH) + 1 - i;
// String date = “”;
// if (j >= 1) {
// date = k + “-” + (j >= 10 ? “” : “0”) + j;
// }
// list.add(date);
// }
return list;
}
/**
* 获取最近30天的日期 list
*
* @return
*/
public static List<String> get30DayList() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 29; i >= 0; i--) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近7天的日期 list正序
*
* @return
*/
public static List<String> get7DayListDesc() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 6; i >= 0; i--) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近15天的日期 list
*
* @return
*/
public static List<String> get15DayListDesc() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 14; i >= 0; i--) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取前30天的日期 list
*
* @return
*/
public static List<String> get30Day() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
calc.setTime(new Date());
calc.add(calc.DATE, -29);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近五个月
*
* @return
*/
public static List<String> getFiveMonthMap() {
List<String> list = new ArrayList<String>();
Calendar c = Calendar.getInstance();
for (int i = 0; i < 5; i++) {
int k = c.get(Calendar.YEAR);
int j = c.get(Calendar.MONTH) + 1 - i;
String date = "";
if (j >= 1) {
date = k + "-" + (j >= 10 ? "" : "0") + j;
} else {
int p = 11 - i;//剩余循环次数
int m = c.get(Calendar.YEAR) - 1;
int n = c.get(Calendar.MONTH) + 2 + p;
date = m + "-" + (n >= 10 ? "" : "0") + n;
}
list.add(date);
}
return list;
}
/**
* 获取最近六个月
*
* @return
*/
public static List<String> getSixMonthMap() {
List<String> list = new ArrayList<String>();
Calendar c = Calendar.getInstance();
for (int i = 0; i < 6; i++) {
int k = c.get(Calendar.YEAR);
int j = c.get(Calendar.MONTH) + 1 - i;
String date = "";
if (j >= 1) {
date = k + "-" + (j >= 10 ? "" : "0") + j;
} else {
int p = 11 - i;//剩余循环次数
int m = c.get(Calendar.YEAR) - 1;
int n = c.get(Calendar.MONTH) + 2 + p;
date = m + "-" + (n >= 10 ? "" : "0") + n;
}
list.add(date);
}
return list;
}
public static List<String> getTwelveMonthMap() {
List<String> list = new ArrayList<String>();
Calendar c = Calendar.getInstance();
for (int i = 0; i < 12; i++) {
int k = c.get(Calendar.YEAR);
int j = c.get(Calendar.MONTH) + 1 - i;
String date = "";
if (j >= 1) {
date = k + "-" + (j >= 10 ? "" : "0") + j;
} else {
int p = 11 - i;//剩余循环次数
int m = c.get(Calendar.YEAR) - 1;
int n = c.get(Calendar.MONTH) + 2 + p;
date = m + "-" + (n >= 10 ? "" : "0") + n;
}
list.add(date);
}
return list;
}
/**
* 根据年月 获取月份最后一天
*
* @param yearMonth
* @return
*/
public static String getLastDayOfMonth(String yearMonth) {
int year = Integer.parseInt(yearMonth.split("-")[0]); //年
int month = Integer.parseInt(yearMonth.split("-")[1]); //月
Calendar cal = Calendar.getInstance();
// 设置年份
cal.set(Calendar.YEAR, year);
// 设置月份
// cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.MONTH, month); //设置当前月的上一个月
// 获取某月最大天数
//int lastDay = cal.getActualMaximum(Calendar.DATE);
int lastDay = cal.getMinimum(Calendar.DATE); //获取月份中的最小值,即第一天
// 设置日历中月份的最大天数
//cal.set(Calendar.DAY_OF_MONTH, lastDay);
cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //上月的第一天减去1就是当月的最后一天
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(cal.getTime());
}
/**
* 根据年月 获取月份第一天
*
* @param yearMonth
* @return
*/
public static String getFirstDayOfMonth(String yearMonth) {
int year = Integer.parseInt(yearMonth.split("-")[0]); //年
int month = Integer.parseInt(yearMonth.split("-")[1]); //月
Calendar cal = Calendar.getInstance();
// 设置年份
cal.set(Calendar.YEAR, year);
// 设置月份
// cal.set(Calendar.MONTH, month - 1);
cal.set(Calendar.MONTH, month - 1); //设置当前月的上一个月
// 获取某月最大天数
//int lastDay = cal.getActualMaximum(Calendar.DATE);
int lastDay = cal.getMinimum(Calendar.DATE); //获取月份中的最小值,即第一天
// 设置日历中月份的最大天数
//cal.set(Calendar.DAY_OF_MONTH, lastDay);
cal.set(Calendar.DAY_OF_MONTH, lastDay); //上月的第一天减去1就是当月的最后一天
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(cal.getTime());
}
/**
* 获取月份第一天 通过int类型的month
*
* @param month
* @return
*/
public static String getFirstDayOfMonth(int month) {
Calendar cal = Calendar.getInstance();
// 设置月份
cal.set(Calendar.MONTH, month - 1);
// 获取某月最小天数
int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
// 设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH, firstDay);
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String firstDayOfMonth = sdf.format(cal.getTime()) + " 00:00:00";
return firstDayOfMonth;
}
/**
* 获得该月最后一天 通过int类型的month
*
* @param month
* @param month
* @return
*/
public static String getLastDayOfMonth(int month) {
Calendar cal = Calendar.getInstance();
// 设置月份
cal.set(Calendar.MONTH, month - 1);
// 获取某月最大天数
int lastDay = 0;
//2月的平年瑞年天数
if (month == 2) {
lastDay = cal.getLeastMaximum(Calendar.DAY_OF_MONTH);
} else {
lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
// 设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
// 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime()) + " 23:59:59";
return lastDayOfMonth;
}
/**
* 获得某个月每一天 通过int类型的month
*
* @param
* @param
* @return
*/
public static List<String> getLastMonthDayOfMonth(String yearMonth) {
int year = Integer.parseInt(yearMonth.split("-")[0]); //年
int month = Integer.parseInt(yearMonth.split("-")[1]); //月
SimpleDateFormat sdfYMD = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String yearMonthDate = sdfYMD.format(date);
String[] yearMonthDateSplit = yearMonthDate.split("-");
int newYear = Integer.parseInt(yearMonthDateSplit[0]);
int newMonth = Integer.parseInt(yearMonthDateSplit[1]);
int newDate = Integer.parseInt(yearMonthDateSplit[2]);
List<String> list = new ArrayList<>();
if (year == newYear && month == newMonth) {
//获取当月的天数
try {
Calendar calc = Calendar.getInstance();
for (int i = newDate-1; i >= 0; i--) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
}else {
SimpleDateFormat sdfYM = new SimpleDateFormat("yyyy-MM");
try {
Date yearMonthD = sdfYM.parse(yearMonth);
Calendar calendar = Calendar.getInstance();
calendar.setTime(yearMonthD);
int actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.add(calendar.DATE, -1);
for (int i=0;i<actualMaximum;i++){
calendar.add(calendar.DATE, 1);
Date minDate = calendar.getTime();
list.add(sdf.format(minDate));
}
// for (int i = actualMaximum-1; i >= 0; i–) {
// // calendar.setTime(new Date());
// calendar.add(calendar.DATE, -i);
// Date minDate = calendar.getTime();
// list.add(sdf.format(minDate));
// }
return list;
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 获取两个时间节点之间的月份列表
**/
public static List<String> getMonthBetween(String minDate, String maxDate) {
ArrayList<String> result = new ArrayList<String>();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
/**
* 获取最近31天的日期 hashmap
*
* @return
*/
public static Map<String, String> get31DayMap() {
try {
Calendar calc = Calendar.getInstance();
Map<String, String> bloodMap = new HashMap<String, String>();
for (int i = 0; i < 31; i++) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
bloodMap.put(sdf.format(minDate), sdf.format(minDate));
}
return bloodMap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近31天的日期 list
*
* @return
*/
public static List<String> get31DayList() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 0; i < 31; i++) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近7天的日期 list
*
* @return
*/
public static List<String> get7DayList() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 0; i < 7; i++) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近15天的日期 list
*
* @return
*/
public static List<String> get15DayList() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 0; i < 15; i++) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近30天的日期 list
*
* @return
*/
public static List<String> get30sDayList() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 0; i < 30; i++) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取最近90天的日期 list
*
* @return
*/
public static List<String> get90DayList() {
try {
Calendar calc = Calendar.getInstance();
List<String> list = new ArrayList<>();
for (int i = 0; i < 90; i++) {
calc.setTime(new Date());
calc.add(calc.DATE, -i);
Date minDate = calc.getTime();
list.add(sdf.format(minDate));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static List<String> getOneMonthList() {
Calendar begin = Calendar.getInstance();// 得到一个Calendar的实例
begin.setTime(new Date()); // 设置时间为当前时间
begin.add(Calendar.MONTH, -1);// 月份减1
begin.add(Calendar.DATE, +1);// 日期加1
Calendar end = Calendar.getInstance();
Long startTime = begin.getTimeInMillis();
Long endTime = end.getTimeInMillis();
Long oneDay = 1000 * 60 * 60 * 24l;// 一天的时间转化为ms
List dates = new ArrayList<>();
Long time = startTime;
int i = 0;
while (time <= endTime) {
Date d = new Date(time);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
dates.add(i, df.format(d));
i++;
time += oneDay;
}
return dates;
}
/**
* 获取某年第一天日期
*
* @param year 年份
* @return Date
*/
public static Date getYearFirst(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
Date currYearFirst = calendar.getTime();
return currYearFirst;
}
/**
* 获取某年最后一天日期
*
* @param year 年份
* @return Date
*/
public static Date getYearLast(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.roll(Calendar.DAY_OF_YEAR, -1);
Date currYearLast = calendar.getTime();
return currYearLast;
}
/**
* 获取上个月第一天
*
* @return
*/
public static Date lastMonthFirstDay() {
//获取前月的第一天
Calendar calendar = Calendar.getInstance();//获取当前日期
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取上个月最后一天
*
* @return
*/
public static Date lastMonthEndDay() {
//获取前月的最后一天
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DATE, -1);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
public static Date obtainDay(Integer state, Integer i) {
LocalDateTime date = null;
//type 类型 0.月 1.天 2.小时 3.分钟 4.秒
date = getLocalDateTime(state, 1, i);
//获取天
// System.out.println(“获取的时间为(天):”+day);
return asDate(date);
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
private static LocalDateTime getLocalDateTime(Integer state, Integer type, Integer i) {
LocalDateTime date;
if (state == 0) {
date = LocalDateTime.now();
} else if (state == 1) {
if (type == 0) { //获取月
date = LocalDateTime.now().minusMonths(i);
} else if (type == 1) { //获取天
date = LocalDateTime.now().minusDays(i);
} else if (type == 2) { //获取小时
date = LocalDateTime.now().minusHours(i);
} else if (type == 3) { //获取分钟
date = LocalDateTime.now().minusMinutes(i);
} else { //获取秒
date = LocalDateTime.now().minusSeconds(i);
}
} else {
if (type == 0) { //获取月
date = LocalDateTime.now().plusMonths(i);
} else if (type == 1) { //获取天
date = LocalDateTime.now().plusDays(i);
} else if (type == 2) { //获取小时
date = LocalDateTime.now().plusHours(i);
} else if (type == 3) { //获取分钟
date = LocalDateTime.now().plusMinutes(i);
} else { //获取秒
date = LocalDateTime.now().plusSeconds(i);
}
}
return date;
}
/**
* 获取昨天的日期 list
*
* @return
*/
public static String getYesterday() {
Calendar calc = Calendar.getInstance();
calc.setTime(new Date());
calc.add(calc.DATE, -1);
Date minDate = calc.getTime();
return sdf.format(minDate);
}
}