package com.opensesame.core.util;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalField;
import java.time.temporal.WeekFields;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
-
时间工具类
-
@author sonny
*/
public class DateUtils {public static final String DATE_TIME_FORMAT = “yyyy-MM-dd HH:mm:ss”;
public static final String DATE_TIME_FORMAT_NYR = “yyyy年MM月dd日”;
public static final String DATE_TIME_FORMAT1 = “yyyy-MM-dd HH:mm”;
public static final String DATE_FORMAT = “yyyy-MM-dd”;
public static final String TIME_FORMAT = “HH:mm:ss”;
public static final String YYYYMM_FORMAT = “yyyyMM”;
public static final String YYMMDD_FORMAT = “yyMMdd”;
public static final String YYMM_FORMAT = “yyMM”;
public static final String D_FORMAT = “d”;
public static final String H = “H”;
public static final Integer ONE_DAY_MILLISECONDS = 1000 * 60 * 60 * 24;
public static final Integer ONE_HOUR_MILLISECONDS = 1000 * 60 * 60;
public static final Long ONE_DAY_MILLISECONDSL = 1000 * 60 * 60 * 24l;
public static final Integer ONE_DAY_MILLISECONDS_END = ONE_DAY_MILLISECONDS - 1;
public static List getPeriodSunday(long startDate, long endDate) {
List sunday = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startDate);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Long firstSunday = calendar.getTimeInMillis();
if (firstSunday > endDate) {
return sunday;
}
sunday.add(firstSunday);
for (; ; ) {
firstSunday += 7 * 24 * 60 * 60 * 1000;
if (firstSunday > endDate) {
break;
}
sunday.add(firstSunday);
}
return sunday;
}public static List getPeriodDate(long startDate, long endDate) {
List date = new ArrayList();
if (startDate > endDate) {
return date;
}
Long start = Long.parseLong(DateFormatUtils.format(startDate, DateUtils.YYMM_FORMAT));
Long end = Long.parseLong(DateFormatUtils.format(endDate, DateUtils.YYMM_FORMAT));
date.add(start);
if (start.equals(end)) {
return date;
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startDate);
for (; ; ) {
calendar.add(Calendar.MONTH, 1);
start = Long.parseLong(DateFormatUtils.format(calendar.getTimeInMillis(), DateUtils.YYMM_FORMAT));
date.add(start);
if (start.equals(end)) {
break;
}
}
return date;
}
//向前推一天,得到前一天的开始时间
public static String getBeforeNDayTimeMillis(Long time, int n) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
cal.add(Calendar.DATE, -n);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return getStrDate(cal.getTimeInMillis());
}
public static List<Integer> getPeriodDays(long startDate, long endDate) {
List<Integer> date = new ArrayList<Integer>();
if (startDate > endDate) {
return date;
}
Integer start = Integer.parseInt(DateFormatUtils.format(startDate, DateUtils.D_FORMAT));
Integer end = Integer.parseInt(DateFormatUtils.format(endDate, DateUtils.D_FORMAT));
date.add(start);
if (start.equals(end)) {
return date;
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(startDate);
for (; ; ) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
start = Integer.parseInt(DateFormatUtils.format(calendar.getTimeInMillis(), DateUtils.D_FORMAT));
date.add(start);
if (start.equals(end)) {
break;
}
}
return date;
}
public static Integer getShardingDate() {
return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.YYYYMM_FORMAT));
}
public static Integer getSequenceDate() {
return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.YYMMDD_FORMAT));
}
public static Integer getPrintTime() {
return Integer.parseInt(DateFormatUtils.format(System.currentTimeMillis(), DateUtils.H));
}
public static Date getStartDateOfDay(Long date) {
if (date != null) {
Calendar day = Calendar.getInstance();
day.setTimeInMillis(date);
day.set(Calendar.HOUR_OF_DAY, 0);
day.set(Calendar.MINUTE, 0);
day.set(Calendar.SECOND, 0);
day.set(Calendar.MILLISECOND, 0);
return day.getTime();
} else {
return null;
}
}
/**
* 获取当年3月31日结束时间
*
* @param date
* @return
*/
public static Long get0331EndDate(Long date) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, 2);
cal.set(Calendar.DAY_OF_MONTH, 31);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTimeInMillis();
}
public static Date getEndDateOfDay(Long date) {
if (date != null) {
Calendar day = Calendar.getInstance();
day.setTimeInMillis(date);
day.set(Calendar.HOUR_OF_DAY, 23);
day.set(Calendar.MINUTE, 59);
day.set(Calendar.SECOND, 59);
day.set(Calendar.MILLISECOND, 999);
return day.getTime();
} else {
return null;
}
}
/**
* 获取日期
*
* @param date
* @return yyyy年MM月dd日
*/
public static String getStrDateNYR(Long date) {
SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_NYR);// 设置日期格式
return df.format(date);
}
/**
* 获取字符串时间
*
* @param date 时间戳
* @return 返回时间字符串:yyyy-MM-dd HH:mm:ss
*/
public static String getStrDate(Long date) {
SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT);// 设置日期格式
return df.format(date);
}
/**
* 获取字符串时间
*
* @param date 时间戳
* @return 返回时间字符串:yyyy-MM-dd
*/
public static String getStrDateTime(Long date) {
SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);// 设置日期格式
return df.format(date);
}
/**
* 根据给定时间获取当天的开始时间
*
* @param date
* @return
*/
public static Long getStartTimeOfDay(Long date) {
if (date != null) {
Calendar day = Calendar.getInstance();
day.setTimeInMillis(date);
day.set(Calendar.HOUR_OF_DAY, 0);
day.set(Calendar.MINUTE, 0);
day.set(Calendar.SECOND, 0);
day.set(Calendar.MILLISECOND, 0);
return day.getTimeInMillis();
} else {
return null;
}
}
/**
* 根据给定时间获取当天的结束时间
*
* @param date
* @return
*/
public static Long getEndTimeOfDay(Long date) {
if (date != null) {
Calendar day = Calendar.getInstance();
day.setTimeInMillis(date);
day.set(Calendar.HOUR_OF_DAY, 23);
day.set(Calendar.MINUTE, 59);
day.set(Calendar.SECOND, 59);
day.set(Calendar.MILLISECOND, 999);
return day.getTimeInMillis();
} else {
return null;
}
}
/**
* @throws
* @Title: getAfterNDayTimeMillis
* @Description: 获取给定时间n天后的0点时间
* @param:
* @return: Long
*/
public static Long getAfterNDayTimeMillis(Long time, int n) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
cal.add(Calendar.DATE, n);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
/**
* 小时转换毫秒数
*/
public static Long getHoutTime(Long hour) {
if (hour == 1l) {
hour = 1l * 30 * 60 * 1000;
} else {
hour = 1l * 60 * 60 * 1000;
}
return hour;
}
/**
* 时效日期
*/
public static Long AgingTime(Integer agingTimeDays, Long createTime) {
Long agingTime;
if (createTime != null) {
agingTime = DateUtils.getEndTimeOfDay(agingTimeDays * 60 * 60 * 24 * 1000 + createTime);
return agingTime;
} else {
Long currentTime = Calendar.getInstance().getTimeInMillis();
agingTime = DateUtils.getEndTimeOfDay(agingTimeDays * 60 * 60 * 24 * 1000 + currentTime);
return agingTime;
}
}
/**
* 根据给定时间获取当月全部天数
*
* @param date
* @return
*/
public static int getDaysOfMonth(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 根据给定时间获取日期在本月的第几天
*
* @param date
* @return
*/
public static int getDay(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 获得此时间所在月的天数
*/
public static int[] getMonthDay(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int[] days = new int[maxDay];
for (int i = 1; i <= maxDay; i++) {
days[i - 1] = i;
}
return days;
}
/**
* 根据给定时间获取日期在的月份(此方法结果需要+1才是正确月份)
*
* @param date
* @return
*/
public static int getMonth(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.get(Calendar.MONTH);
}
/**
* 根据给定的时间获取日期所在的年份
*
* @param date
* @return
*/
public static int getYear(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
return calendar.get(Calendar.YEAR);
}
/**
* 获得此时间所在月的天数
*/
public static int[] getMonthDays(Long date) {
String da = getStrDate(date);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, Integer.parseInt(da.substring(0, 4)));
calendar.set(Calendar.MONTH, Integer.parseInt(da.substring(5, 7)) - 1);
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int[] days = new int[maxDay];
for (int i = 1; i <= maxDay; i++) {
days[i - 1] = i;
}
return days;
}
/**
* 获取日期所在月份的第一天
*
* @param date
* @return
*/
public static Long getStartDayOfMonth(Long date) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getYear(date));
cal.set(Calendar.MONTH, getMonth(date));
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
// public static void main(String[] args) {
// System.out.println(getLastYearTime(1646064000000L));
// }
/**
* 获取去年的时间戳
* @param date
* @return
/
public static Long getLastYearTime(Long date){
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
cal.add(Calendar.YEAR, -1);
return cal.getTimeInMillis();
}
/*
* 获取日期去年所在月份的第一天
*
* @param date
* @return
*/
public static Long getLastYearStartDayOfMonth(Long date) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, getYear(date)-1);
cal.set(Calendar.MONTH, getMonth(date));
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
/**
* 获取本年度第一天
*/
public static Long getYearLast(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, getYear(date));
Long currYearFirst = calendar.getTimeInMillis();
return currYearFirst;
}
/**
* 获取本年度第一天(YEAR-2018)
*/
public static Long getYearFirst(Long year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, Math.toIntExact(year));
Long currYearFirst = calendar.getTimeInMillis();
return currYearFirst;
}
/**
* 获取日期所在月份的最后一天
*
* @param date
* @return
*/
public static Long getLastDayOfMonth(Long date) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, lastDay);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTimeInMillis();
}
/**
* 传入时间字符串转化成时间挫毫秒
*/
public static Long stringDateToTimes(String date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
return sdf.parse(date).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return 0l;
}
/**
* 获取两个时间段内,每天的开始时间
*
* @param startTime
* @param endTime
* @return
*/
public static List<Long> getEveryDayStartTime(Long startTime, Long endTime) {
List<Long> list = new ArrayList<>();
Long start = getStartTimeOfDay(startTime);
list.add(start);
while (endTime - start > ONE_DAY_MILLISECONDS) {
start += ONE_DAY_MILLISECONDS;
list.add(start);
}
return list;
}
/*
* 将时间转换为时间戳
*/
public static Long dateToStamp(String s) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
return ts;
}
/*
* 将yyyy-MM时间转换为时间戳
*/
public static Long dateToStampMonth(String s) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
Date date = simpleDateFormat.parse(s);
long ts = date.getTime();
return ts;
}
public static Long dateToStampYMD(String s) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse(s);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// calendar.set(Calendar.MILLISECOND, 1000);
return calendar.getTimeInMillis();
}
/*
* 获得当前时间的本月4号开始时间
*/
public static Long dateToStamp10() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 4);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 费用项导入 临时调整为 2月1号上午10点可导入费用项
*/
public static Long dateToStamp1() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 获取本年度最后一天
*/
public static Long getYearEnd(Long year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, Math.toIntExact(year));
calendar.set(Calendar.MONTH, 11);//月份减一
calendar.set(Calendar.DAY_OF_MONTH, 31);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTimeInMillis();
}
/**
* 获取某年最后一天日期
*
* @param year 年份
* @return Date
*/
public static Long 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 calendar.getTimeInMillis();
}
/**
* 获取某时间段内的每个日期
*
* @param startDate
* @param endDate
* @return
*/
public static List<Long> getPeriodDates(long startDate, long endDate) {
List<Long> date = new ArrayList<>();
if (startDate > endDate) {
return date;
}
Long start = getStartTimeOfDay(startDate);
Long end = getStartTimeOfDay(endDate);
date.add(start);
if (start.equals(end)) {
return date;
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(start);
for (; ; ) {
calendar.add(Calendar.DATE, 1);
start = calendar.getTimeInMillis();
date.add(start);
if (start.equals(end)) {
break;
}
}
return date;
}
/**
* 获取字符串时间
*
* @param format 时间格式
* @param date 时间戳
* @return
*/
public static String getStrDate(Long date, String format) {
SimpleDateFormat df = new SimpleDateFormat(format);// 设置日期格式
return df.format(date);
}
/**
* @return
* @Author lihaiming
* @Description //TODO 获取下个月当前天的时间
* @Date 2019/7/8 13:44
* @Param
**/
public static Long getNextMonthTime(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.MONTH, 1);
return calendar.getTimeInMillis();
}
/**
* 获取第二天上午十点时间
*
* @param date
* @return
*/
public static Long getTomorrow10AM(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.DATE, 1);
calendar.add(Calendar.HOUR_OF_DAY, 10);
return calendar.getTimeInMillis();
}
/**
* 获取后天10:30的时间 _____最新需求 由 十点半改成10点
*
* @param date
* @return
*/
public static Long getAfterTwoDay1030AM(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.DATE, 2);
calendar.add(Calendar.HOUR_OF_DAY, 10);
// calendar.add(Calendar.MINUTE,30);
return calendar.getTimeInMillis();
}
/**
* 获取当天上午十点时间
*
* @param date
* @return
*/
public static Long get10AM(Long date) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(getStartTimeOfDay(date));
calendar.add(Calendar.DATE, 0);
calendar.add(Calendar.HOUR_OF_DAY, 10);
return calendar.getTimeInMillis();
}
/**
* 获取上个月的0点0分0秒
*
* @return
*/
public static Long getLastMonthStartDay() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 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.getTimeInMillis();
}
/**
* 获取上个月的最后一天0点0分0秒
*
* @return
*/
public static Long getLastMonthEndDay() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis();
}
/**
* 获取本周开始时间
*
* @param time
* @return
*/
public static Long getBeginTimeOfWeek(Long time) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
if (dayofweek == 1) {
dayofweek += 7;
}
cal.add(Calendar.DATE, 2 - dayofweek);
return getStartTimeOfDay(cal.getTimeInMillis());
}
/**
* 获取本周结束时间
*
* @param time
* @return
*/
public static Long getEndTimeOfWeek(Long time) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
int dayofweek = cal.get(Calendar.DAY_OF_WEEK)-1;
if (dayofweek == 0) {
dayofweek = 7;
}
cal.add(Calendar.DATE, - dayofweek+7);
return getEndTimeOfDay(cal.getTimeInMillis());
}
/**
* @return
* @MethodName 获取当年的总周数
* @Description TODO
* @Param
*/
public static Integer getWeekCount(Long year) {
Calendar calendar = Calendar.getInstance();
calendar.set(Math.toIntExact(year), 2, 5);
calendar.setFirstDayOfWeek(Calendar.MONDAY);//设置星期一为一周开始的第一天
// calendar.setTimeInMillis(time);//获得时间戳
int weeksInWeekYear = calendar.getWeeksInWeekYear();
return weeksInWeekYear;
}
/**
* 判断两个日期相隔天数
*
* @param startTime
* @param endTime
* @return
*/
public static Integer differentDaysByMillisecond(Long startTime, Long endTime) {
return (int) ((getStartTimeOfDay(endTime) - getStartTimeOfDay(startTime)) / ONE_DAY_MILLISECONDS);
}
/**
* @return
* @MethodName dayForWeek
* @Description TODO 判断当前日期是星期几
* @Param 2020-03-16
* @Date 2020/3/16 22:42
*/
public static String dayForWeek(String pTime) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date tmpDate = null;
try {
tmpDate = format.parse(pTime);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
try {
cal.setTime(tmpDate);
} catch (Exception e) {
e.printStackTrace();
}
int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* 获取指定年、月份的第一天
*
* @param year
* @param month
* @return
*/
public static Long getStartTimeOfMonth(Integer year, Integer month) {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
return cal.getTimeInMillis();
}
/**
* 获取指定年、月份的最后一天
*
* @param year
* @param month
* @return
*/
public static Long getEndTimeOfMonth(Integer year, Integer month) {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
return cal.getTimeInMillis();
}
// public static void main(String[] args) throws ParseException {
// System.out.println(dateToStampYMD(“2022-01-30”));
System.out.println(getStrDate(getEndTimeOfMonth(2019, -2)));
// }
/**
* 得到两日期相差几个月
*
* @param
* @return
*/
public static long getMonthDiff(String startDate, String endDate) {
long monthday = 0;
try {
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date startDate1 = fmt.parse(startDate);
Calendar starCal = Calendar.getInstance();
starCal.setTime(startDate1);
int sYear = starCal.get(Calendar.YEAR);
int sMonth = starCal.get(Calendar.MONTH);
int sDay = starCal.get(Calendar.DAY_OF_MONTH);
Date endDate1 = fmt.parse(endDate);
Calendar endCal = Calendar.getInstance();
endCal.setTime(endDate1);
int eYear = endCal.get(Calendar.YEAR);
int eMonth = endCal.get(Calendar.MONTH);
int eDay = endCal.get(Calendar.DAY_OF_MONTH);
monthday = ((eYear - sYear) * 12 + (eMonth - sMonth));
//这里计算零头的情况,根据实际确定是否要加1 还是要减1
if (sDay < eDay) {
monthday = monthday + 1;
}
} catch (Exception e) {
e.printStackTrace();
}
return monthday;
}
/**
* 获取去年日期所在月份的最后一天
*
* @param date
* @return
*/
public static Long getLastYearEndDayOfMonth(Long date) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(date);
cal.add(Calendar.YEAR, -1);
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, lastDay);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999);
return cal.getTimeInMillis();
}
}