package com
.supermarket
.goods
.utils
;
import org
.springframework
.util
.Assert
;
import java
.sql
.Timestamp
;
import java
.text
.ParseException
;
import java
.text
.ParsePosition
;
import java
.text
.SimpleDateFormat
;
import java
.time
.*
;
import java
.time
.format
.DateTimeFormatter
;
import java
.time
.temporal
.TemporalAdjusters
;
import java
.util
.*
;
import static java
.time
.ZoneId
.systemDefault
;
import static java
.util
.Date
.from
;
public class DateUtil {
public static final String DEFAULT_YEAR_PATTERN
= "yyyy";
public static final String DEFAULT_YEAR_MONTH_PATTERN
= "yyyy-MM";
public static final String DEFAULT_DATE_SHORT_PATTERN
= "yyyy-MM-dd";
public static final String DEFAULT_DATE_LONG_PATTERN
= "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_WEEK_PATTERN
= "yyyy-MM-dd EE";
public static final String DEFAULT_DATE_PATTERN
= "yyyyMMddHHmmssSSS";
public static final String DEFAULT_DATE_SHORT_M_PATTERN
= "yyyyMMdd";
public static final String DEFAULT_DATE_LONG_M_PATTERN
= "yyyyMMddHHmmss";
private static DateTimeFormatter yearTimeFormatter
= DateTimeFormatter
.ofPattern(DEFAULT_YEAR_PATTERN
);
private static DateTimeFormatter timeFormatter
= DateTimeFormatter
.ofPattern(DEFAULT_YEAR_MONTH_PATTERN
);
private static DateTimeFormatter shortTimeFormatter
= DateTimeFormatter
.ofPattern(DEFAULT_DATE_SHORT_PATTERN
);
private static DateTimeFormatter longTimeFormatter
= DateTimeFormatter
.ofPattern(DEFAULT_DATE_LONG_PATTERN
);
private static final String
[] MONTH
= {"一月", "二月", "三月", "四月", "五月", "六月","七月", "八月", "九月", "十月", "十一月", "十二月"};
public static final long MILLIS_PER_SECOND
= 1000;
public static final long MILLIS_PER_MINUTE
= 60 * MILLIS_PER_SECOND
;
public static final long MILLIS_PER_HOUR
= 60 * MILLIS_PER_MINUTE
;
public static final long MILLIS_PER_DAY
= 24 * MILLIS_PER_HOUR
;
public static final long MILLIS_PER_30DAY
= 30 * MILLIS_PER_DAY
;
public static final long MILLIS_PER_31DAY
= 31 * MILLIS_PER_DAY
;
public static final int TIME_NO_CHANGE
= -1;
public static final int TIME_IS_ZERO
= 0;
public static LocalDateTime
dayStart(int offset
) {
return LocalDate
.now().plusDays(offset
).atStartOfDay();
}
public static long dayStartMill(int offset
) {
return dayStart(offset
).toInstant(ZoneOffset
.of("+8")).toEpochMilli();
}
public static LocalDateTime
dayEnd(int offset
) {
return LocalDateTime
.of(dayStart(offset
).toLocalDate(), LocalTime
.MAX
);
}
public static long dayEndMill(int offset
) {
return dayEnd(offset
).toInstant(ZoneOffset
.of("+8")).toEpochMilli();
}
public static String
getFormatDate(long time
) {
return longTimeFormatter
.format(LocalDateTime
.ofInstant(Instant
.ofEpochMilli(time
), ZoneId
.systemDefault()));
}
public static String
getFormatDateYMD(long time
) {
return shortTimeFormatter
.format(LocalDateTime
.ofInstant(Instant
.ofEpochMilli(time
), ZoneId
.systemDefault()));
}
public static String
getFormatDateYear(long time
) {
return yearTimeFormatter
.format(LocalDateTime
.ofInstant(Instant
.ofEpochMilli(time
), ZoneId
.systemDefault()));
}
public static int getCurrentYear() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.YEAR
);
}
public static int getSomeYear(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.YEAR
);
}
public static int getCurrentMonth() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.MONTH
) + 1;
}
public static int getSomeMonth(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.MONTH
) + 1;
}
public static int getCurrentDay() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.DAY_OF_MONTH
);
}
public static int getSomeDay(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.DAY_OF_MONTH
);
}
public static int getCurrentHour() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.HOUR_OF_DAY
);
}
public static int getSomeHour(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.HOUR_OF_DAY
);
}
public static int getCurrentMinute() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.MINUTE
);
}
public static int getSomeMinute(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.MINUTE
);
}
public static int getCurrentSecond() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.SECOND
);
}
public static int getSomeSecond(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.SECOND
);
}
public static int getCurrentMillisecond() {
Calendar cal
= Calendar
.getInstance();
return cal
.get(Calendar
.MILLISECOND
);
}
public static int getSomeMillisecond(Date date
) {
Calendar cal
= dateToCalendar(date
);
return cal
.get(Calendar
.MILLISECOND
);
}
public static Date
getCurrentDate() {
Calendar cal
= Calendar
.getInstance();
return cal
.getTime();
}
public static Date
getYestodayDate() {
return new Date(System
.currentTimeMillis() - MILLIS_PER_DAY
);
}
public static Date
getYestodayDate(Date date
) {
return new Date(date
.getTime() - MILLIS_PER_DAY
);
}
public static long get30DaysDate(long date
) {
return date
- MILLIS_PER_30DAY
;
}
public static Date
getTomorrowDate() {
return new Date(System
.currentTimeMillis() + MILLIS_PER_DAY
);
}
public static Date
getTomorrowDate(Date date
) {
return new Date(date
.getTime() + MILLIS_PER_DAY
);
}
public static String
getCurrentDateAccurateToDay() {
return getCurrentDate(DEFAULT_DATE_PATTERN
);
}
public static String
getCurrentDateAccurateToWeek() {
return getCurrentDate(DEFAULT_DATE_WEEK_PATTERN
);
}
public static void main(String
[] args
) {
String currentDateAccurateToWeek
= getCurrentDateAccurateToWeek();
System
.out
.println(currentDateAccurateToWeek
);
}
public static String
getCurrentDateAccurateToSecond() {
return getCurrentDate(DEFAULT_DATE_LONG_PATTERN
);
}
public static String
formatDateAccurateToMillisecond(Date d
) {
return dateToString(d
, "yyyyMMddHHmmssSSS");
}
public static String
getCurrentDateAccurateToMillisecond() {
return getCurrentDate("yyyy-MM-dd HH:mm:ss,SSS");
}
public static String
getTomorrowStringDate() {
return getTomorrowDate(DEFAULT_DATE_PATTERN
);
}
public static String
getYestodayStringDate() {
return getYestodayDate(DEFAULT_DATE_PATTERN
);
}
public static String
getYestodayDate(String pattern
) {
Date yestodayDate
= new Date(System
.currentTimeMillis() - MILLIS_PER_DAY
);
return dateToString(yestodayDate
, pattern
);
}
public static String
getTomorrowDate(String pattern
) {
Date tomorrowDate
= new Date(System
.currentTimeMillis() + MILLIS_PER_DAY
);
return dateToString(tomorrowDate
, pattern
);
}
public static String
getCurrentDate(String pattern
) {
return dateToString(new Date(), pattern
);
}
public static String
getWeekDay() {
String
[] weekDays
= {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
Calendar cal
= Calendar
.getInstance();
cal
.setTime(new Date());
int w
= cal
.get(Calendar
.DAY_OF_WEEK
) - 1;
if (w
< 0) {
w
= 0;
}
return weekDays
[w
];
}
public static String
getDateByFormat(String date
, String oldPattern
, String newPattern
) {
Assert
.notNull(date
, "指定日期为null");
Date newDate
= stringToDate(date
, oldPattern
);
return dateToString(newDate
, newPattern
);
}
public static String
dateToString(Date date
, String pattern
) {
Assert
.notNull(date
, "指定日期为null");
SimpleDateFormat sdf
= new SimpleDateFormat(pattern
);
return sdf
.format(date
);
}
public static Date
stringToDate(String date
, String pattern
) {
return stringToDate(date
, pattern
, Locale
.CHINA
);
}
public static Date
stringToDate(String date
, String pattern
, Locale locale
) {
SimpleDateFormat formate
= new SimpleDateFormat(pattern
, locale
);
Date newDate
= formate
.parse(date
, new ParsePosition(0));
Assert
.notNull(newDate
, "日期可能与所给格式不匹配");
return newDate
;
}
public static Calendar
stringToCalendar(String date
, String pattern
) {
Assert
.notNull(date
, "指定日期为null");
Date newDate
= stringToDate(date
, pattern
);
return dateToCalendar(newDate
);
}
public static Date
calendarToDate(Calendar cal
) {
return cal
.getTime();
}
public static Calendar
dateToCalendar(Date date
) {
Calendar cal
= Calendar
.getInstance();
cal
.setTime(date
);
return cal
;
}
public static java
.sql
.Date
utilDateToSqlDate(Date date
) {
return new java.sql.Date(date
.getTime());
}
public static Date
sqlDateToUtilDate(java
.sql
.Date date
) {
return new Date(date
.getTime());
}
public static Date
getSomeDateAccurateToMinHour(Date date
) {
Map map
= new HashMap();
map
.put(new Integer(Calendar
.HOUR_OF_DAY
), new Integer(TIME_IS_ZERO
));
map
.put(new Integer(Calendar
.MINUTE
), new Integer(TIME_IS_ZERO
));
map
.put(new Integer(Calendar
.SECOND
), new Integer(TIME_IS_ZERO
));
return getSomeDate(date
, map
);
}
public static Date
getSomeDateAccurateToMaxHour(Date date
) {
Map map
= new HashMap();
map
.put(new Integer(Calendar
.HOUR_OF_DAY
), new Integer(23));
map
.put(new Integer(Calendar
.MINUTE
), new Integer(59));
map
.put(new Integer(Calendar
.SECOND
), new Integer(59));
return getSomeDate(date
, map
);
}
public static Date
getSomeDateAccurateToMinMonth(Date date
) {
Map map
= new HashMap();
map
.put(new Integer(Calendar
.DAY_OF_MONTH
), new Integer(1));
map
.put(new Integer(Calendar
.HOUR_OF_DAY
), new Integer(TIME_IS_ZERO
));
map
.put(new Integer(Calendar
.MINUTE
), new Integer(TIME_IS_ZERO
));
map
.put(new Integer(Calendar
.SECOND
), new Integer(TIME_IS_ZERO
));
return getSomeDate(date
, map
);
}
public static Date
getSomeDateAccurateToMaxMonth(Date date
) {
Map map
= new HashMap();
map
.put(new Integer(Calendar
.DAY_OF_MONTH
), new Integer(getDaysOfMonth(date
)));
map
.put(new Integer(Calendar
.HOUR_OF_DAY
), new Integer(23));
map
.put(new Integer(Calendar
.MINUTE
), new Integer(59));
map
.put(new Integer(Calendar
.SECOND
), new Integer(59));
return getSomeDate(date
, map
);
}
public static Date
getSomeDate(Date date
, Map calendar
) {
Calendar cal
= dateToCalendar(date
);
Iterator it
= calendar
.entrySet().iterator();
while (it
.hasNext()) {
Map
.Entry entry
= (Map
.Entry
) it
.next();
Integer key
= (Integer
) entry
.getKey();
Integer value
= (Integer
) entry
.getValue();
if (key
.intValue() == Calendar
.MONTH
) {
cal
.set(key
.intValue(), value
.intValue() - 1);
} else {
cal
.set(key
.intValue(), value
.intValue());
}
}
return calendarToDate(cal
);
}
public static String
getDateWithDayOfYear(int year
, int dayOfYear
) {
SimpleDateFormat df
= new SimpleDateFormat(DEFAULT_DATE_PATTERN
);
Calendar cal
= Calendar
.getInstance();
cal
.set(Calendar
.YEAR
, year
);
cal
.set(Calendar
.DAY_OF_YEAR
, dayOfYear
);
return df
.format(cal
.getTime());
}
public static String
getDateWithDayOfCurrentWeek(int dayOfWeek
) {
checkWeek(dayOfWeek
);
SimpleDateFormat df
= new SimpleDateFormat(DEFAULT_DATE_PATTERN
);
Calendar cal
= Calendar
.getInstance();
cal
.set(Calendar
.DAY_OF_WEEK
, dayOfWeek
);
if (dayOfWeek
== Calendar
.SUNDAY
) {
cal
.add(Calendar
.DATE
, 7);
}
return df
.format(cal
.getTime());
}
public static int getDaysOfMonth(Date date
) {
Calendar cal
= Calendar
.getInstance();
cal
.clear();
cal
.set(Calendar
.YEAR
, getSomeYear(date
));
cal
.set(Calendar
.MONTH
, getSomeMonth(date
) - 1);
return cal
.getActualMaximum(Calendar
.DAY_OF_MONTH
);
}
public static int getDaysOfYear(int year
) {
return isLeapYear(year
) ? 366 : 365;
}
public static Date
calculateWithHour(Date date
, int hour
) {
Calendar cal
= dateToCalendar(date
);
cal
.set(Calendar
.HOUR_OF_DAY
, hour
);
return cal
.getTime();
}
public static Date
calculateWithDay(Date date
, int day
) {
Calendar cal
= dateToCalendar(date
);
cal
.setTimeInMillis(cal
.getTimeInMillis() + day
* MILLIS_PER_DAY
);
return cal
.getTime();
}
public static Date
calculateWithMonth(Date date
, int month
) {
Calendar cal
= dateToCalendar(date
);
cal
.add(Calendar
.MONTH
, month
);
return cal
.getTime();
}
public static Date
calculateWithYear(Date date
, int year
) {
Calendar cal
= dateToCalendar(date
);
cal
.set(Calendar
.YEAR
, year
);
return cal
.getTime();
}
public static String
calculateWithHour(String date
, int hour
) {
Date temp
= calculateWithHour(stringToDate(date
, DEFAULT_DATE_PATTERN
), hour
);
return dateToString(temp
, DEFAULT_DATE_PATTERN
);
}
public static String
calculateWithDay(String date
, int day
) {
Date temp
= calculateWithDay(stringToDate(date
, DEFAULT_DATE_PATTERN
), day
);
return dateToString(temp
, DEFAULT_DATE_PATTERN
);
}
public static String
calculateWithMonth(String date
, int month
) {
Date temp
= calculateWithMonth(stringToDate(date
, DEFAULT_DATE_PATTERN
), month
);
return dateToString(temp
, DEFAULT_DATE_PATTERN
);
}
public static String
calculateWithYear(String date
, int year
) {
Date temp
= calculateWithYear(stringToDate(date
, DEFAULT_DATE_PATTERN
), year
);
return dateToString(temp
, DEFAULT_DATE_PATTERN
);
}
public static int getBetweenDays(Date date1
, Date date2
) {
Calendar d1
= dateToCalendar(date1
);
Calendar d2
= dateToCalendar(date2
);
if (d1
.after(d2
)) {
Calendar swap
= d1
;
d1
= d2
;
d2
= swap
;
}
int days
= d2
.get(Calendar
.DAY_OF_YEAR
) - d1
.get(Calendar
.DAY_OF_YEAR
);
int y2
= d2
.get(Calendar
.YEAR
);
if (d1
.get(Calendar
.YEAR
) != y2
) {
d1
= (Calendar
) d1
.clone();
do {
days
+= d1
.getActualMaximum(Calendar
.DAY_OF_YEAR
);
d1
.add(Calendar
.YEAR
, 1);
} while (d1
.get(Calendar
.YEAR
) != y2
);
}
return days
;
}
public static int getBetweenDaysByNegative(Date date1
, Date date2
) {
Calendar d1
= dateToCalendar(date1
);
Calendar d2
= dateToCalendar(date2
);
if (d1
.after(d2
)) {
Calendar swap
= d1
;
d1
= d2
;
d2
= swap
;
int days
= d2
.get(Calendar
.DAY_OF_YEAR
) - d1
.get(Calendar
.DAY_OF_YEAR
);
int y2
= d2
.get(Calendar
.YEAR
);
if (d1
.get(Calendar
.YEAR
) != y2
) {
d1
= (Calendar
) d1
.clone();
do {
days
+= d1
.getActualMaximum(Calendar
.DAY_OF_YEAR
);
d1
.add(Calendar
.YEAR
, 1);
} while (d1
.get(Calendar
.YEAR
) != y2
);
}
return -days
;
} else {
int days
= d2
.get(Calendar
.DAY_OF_YEAR
) - d1
.get(Calendar
.DAY_OF_YEAR
);
int y2
= d2
.get(Calendar
.YEAR
);
if (d1
.get(Calendar
.YEAR
) != y2
) {
d1
= (Calendar
) d1
.clone();
do {
days
+= d1
.getActualMaximum(Calendar
.DAY_OF_YEAR
);
d1
.add(Calendar
.YEAR
, 1);
} while (d1
.get(Calendar
.YEAR
) != y2
);
}
return days
;
}
}
public static int getBetweenMinute(Date date1
, Date date2
) {
return (int) (getBetweenMillis(date1
, date2
) / MILLIS_PER_MINUTE
);
}
public static int getBetweenSecond(Date date1
, Date date2
) {
return (int) (getBetweenMillis(date1
, date2
) / MILLIS_PER_SECOND
);
}
public static long getBetweenMillis(Date date1
, Date date2
) {
Calendar d1
= dateToCalendar(date1
);
Calendar d2
= dateToCalendar(date2
);
if (d1
.after(d2
)) {
Calendar swap
= d1
;
d1
= d2
;
d2
= swap
;
}
return d2
.getTimeInMillis() - d1
.getTimeInMillis();
}
public static boolean isLeapYear(int year
) {
boolean isLeapYear
= false;
int gregorianCutoverYear
= 1582;
if (year
>= gregorianCutoverYear
) {
if ((year
% 4 == 0) && ((year
% 100 != 0) || (year
% 400 == 0))) {
isLeapYear
= true;
}
} else {
if (year
% 4 == 0) {
isLeapYear
= true;
}
}
return isLeapYear
;
}
public static void checkYear(int year
) {
Assert
.isTrue((year
> 10000 || year
< 1000), "您输入的年份越界,必须在1000~9999之间");
}
public static void checkMonth(int month
) {
Assert
.isTrue((month
< 1 || month
> 12), "您输入的月份不合法,必须在1~12之间");
}
public static void checkWeek(int week
) {
Assert
.isTrue((week
< 1 || week
> 7), "您输入的星期不合法,必须在1~7之间");
}
public static void checkDayOfMonth(Date date
) {
int day
= getSomeDay(date
);
Assert
.isTrue((day
< 1), "您输入的日期不合法,日必须大于零");
Assert
.isTrue((day
> getDaysOfMonth(date
)), "您输入的日期不合法,日必须小于当月最大天数");
}
public static void checkDayOfYear(int year
, int dayOfYear
) {
Assert
.isTrue((dayOfYear
< 1), "您输入的日期不合法,日必须大于零");
Assert
.isTrue((dayOfYear
> getDaysOfYear(year
)), "您输入的日期不合法,日必须小于当年最大天数");
}
public static boolean compareBothDate(String oldDate
, String newDate
, String pattern
) {
Calendar c1
= stringToCalendar(oldDate
, pattern
);
Calendar c2
= stringToCalendar(newDate
, pattern
);
return (c2
.getTimeInMillis() - c1
.getTimeInMillis()) >= 0;
}
public static boolean compareSameDate(String oldDate
, String newDate
, String pattern
) {
Calendar c1
= stringToCalendar(oldDate
, pattern
);
Calendar c2
= stringToCalendar(newDate
, pattern
);
return (c2
.getTimeInMillis() - c1
.getTimeInMillis()) == 0;
}
public static int getDayOfweek() {
int week
= 0;
Calendar calendar
= Calendar
.getInstance();
calendar
.setTime(new Date());
week
= calendar
.get(Calendar
.DAY_OF_WEEK
);
week
= week
- 1;
if (week
== 0) {
week
= 7;
}
return week
;
}
public static String
getLittleDate() {
return getCurrentDate(DEFAULT_DATE_SHORT_M_PATTERN
);
}
public static String
getToSecond() {
return getCurrentDate(DEFAULT_DATE_LONG_M_PATTERN
);
}
public static String
getDay(Long mss
, int model
) {
String day
= String
.valueOf(mss
/ (1000 * 60 * 60 * 24));
String hour
= String
.valueOf((mss
% (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
String minutes
= String
.valueOf((mss
% (1000 * 60 * 60)) / (1000 * 60));
String seconds
= String
.valueOf((mss
% (1000 * 60)) / 1000);
if (model
== 1) {
return day
+ "天 " + hour
+ "小时";
} else {
return day
+ " " + hour
+ ":" + minutes
+ ":" + seconds
;
}
}
public static String
formatDate10(Date newDate
) {
SimpleDateFormat dateFormat
= new SimpleDateFormat(DEFAULT_DATE_SHORT_PATTERN
);
String date
= dateFormat
.format(newDate
);
return date
;
}
public static String
getBeforeDays(String pattern
, Integer days
) {
SimpleDateFormat sdf
= new SimpleDateFormat(pattern
);
Calendar cal
= dateToCalendar(new Date());
cal
.add(Calendar
.DATE
, days
);
return sdf
.format(cal
.getTime());
}
public static String
Millis2HMSTime(long mtime
) {
long lTime
= mtime
/ 1000;
int time
= Integer
.parseInt(lTime
+ "");
String timeStr
= null
;
int hour
= 0;
int minute
= 0;
int second
= 0;
if (time
<= 0)
return "0分0秒";
else {
minute
= time
/ 60;
if (minute
< 60) {
second
= time
% 60;
if (minute
== 0) {
timeStr
= unitFormat(second
) + "秒";
} else {
timeStr
= minute
+ "分" + unitFormat(second
) + "秒";
}
} else {
hour
= minute
/ 60;
if (hour
> 99999) {
return "99999时59分59秒";
}
minute
= minute
% 60;
second
= time
- hour
* 3600 - minute
* 60;
timeStr
= hour
+ "时" + unitFormat(minute
) + "分" + unitFormat(second
) + "秒";
}
}
return timeStr
;
}
public static String
Millis2DHMTime(Long ms
) {
Integer ss
= 1000;
Integer mi
= ss
* 60;
Integer hh
= mi
* 60;
Integer dd
= hh
* 24;
Long day
= ms
/ dd
;
Long hour
= (ms
- day
* dd
) / hh
;
Long minute
= (ms
- day
* dd
- hour
* hh
) / mi
;
StringBuilder sb
= new StringBuilder();
if (day
> 0) {
sb
.append(day
+ "天");
}
if (hour
> 0) {
sb
.append(hour
+ "小时");
}
if (minute
> 0) {
sb
.append(minute
+ "分钟");
}
return sb
.toString();
}
public static String
secondMillis2DHMTime(Long s
) {
Integer ss
= 1;
Integer mi
= ss
* 60;
Integer hh
= mi
* 60;
Integer dd
= hh
* 24;
Long day
= s
/ dd
;
Long hour
= (s
- day
* dd
) / hh
;
Long minute
= (s
- day
* dd
- hour
* hh
) / mi
;
StringBuilder sb
= new StringBuilder();
if (day
> 0) {
sb
.append(day
+ "天");
}
if (hour
> 0) {
sb
.append(hour
+ "小时");
}
if (minute
> 0) {
sb
.append(minute
+ "分钟");
}
return sb
.toString();
}
private static String
unitFormat(int i
) {
String retStr
= null
;
if (i
>= 0 && i
< 10) {
retStr
= "0" + Integer
.toString(i
);
} else {
retStr
= "" + i
;
}
return retStr
;
}
public static Date
getNow() {
return from(LocalDateTime
.now().atZone(systemDefault()).toInstant());
}
public static Date
getEndTime(Date date
, int count
) {
Calendar ca
= Calendar
.getInstance();
ca
.setTime(date
);
ca
.add(Calendar
.DATE
, count
);
Date currdate
= ca
.getTime();
return currdate
;
}
public static Date
getDate(String dateTime
) {
SimpleDateFormat dateTimeFormat
= new SimpleDateFormat(DEFAULT_DATE_LONG_PATTERN
);
try {
return dateTimeFormat
.parse(dateTime
);
} catch (ParseException e
) {
e
.printStackTrace();
}
return null
;
}
public static int getIntervalDay(Date startTime
, Date endTime
) {
Calendar cal1
= Calendar
.getInstance();
cal1
.setTime(startTime
);
Calendar cal2
= Calendar
.getInstance();
cal2
.setTime(endTime
);
int day1
= cal1
.get(Calendar
.DAY_OF_YEAR
);
int day2
= cal2
.get(Calendar
.DAY_OF_YEAR
);
int year1
= cal1
.get(Calendar
.YEAR
);
int year2
= cal2
.get(Calendar
.YEAR
);
if (year1
!= year2
)
{
int timeDistance
= 0;
for (int i
= year1
; i
< year2
; i
++) {
if (i
% 4 == 0 && i
% 100 != 0 || i
% 400 == 0)
{
timeDistance
+= 366;
} else
{
timeDistance
+= 365;
}
}
return timeDistance
+ (day2
- day1
);
} else {
return day2
- day1
;
}
}
public static String
formatDateTime(Date date
) {
if (date
== null
) {
return "";
}
Calendar tempDate
= Calendar
.getInstance();
tempDate
.setTime(date
);
SimpleDateFormat dateTimeFormat
= new SimpleDateFormat(DEFAULT_DATE_LONG_PATTERN
);
return dateTimeFormat
.format(tempDate
.getTime());
}
public static Date
getDayStart(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();
}
public static Date
getDayEnd(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 Timestamp
formatTimestamp(String time
) {
Timestamp ts
= Timestamp
.valueOf(time
);
return ts
;
}
public static Date
longToDate(long dateLong
) {
Date date
= new Date(dateLong
);
return date
;
}
public static Date
localTimeToDate(LocalDateTime localDateTime
) {
ZoneId zone
= ZoneId
.systemDefault();
Instant instant
= localDateTime
.atZone(zone
).toInstant();
Date date
= Date
.from(instant
);
return date
;
}
public static Date
getStartDateOfMonth(Date d
) {
Calendar c
= Calendar
.getInstance();
c
.setTime(d
);
c
.add(Calendar
.MONTH
, 0);
c
.set(Calendar
.DAY_OF_MONTH
, 1);
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();
}
public static String
getYearMonthFromLocalDataTime(LocalDate localDate
) {
return timeFormatter
.format(localDate
);
}
public static LocalDate
getFirstDayOfMonth(LocalDate localDate
) {
int year
= localDate
.getYear();
Month month
= localDate
.getMonth();
return LocalDate
.of(year
, month
, 1);
}
private static void getSubYearMonth(LocalDate start
, LocalDate end
, Set
<String> set
) {
start
= getFirstDayOfMonth(start
);
end
= getFirstDayOfMonth(end
);
for (LocalDate i
= start
; i
.isBefore(end
) || i
.equals(end
); i
= i
.plusMonths(1L
)) {
set
.add(getYearMonthFromLocalDataTime(i
));
}
}
public static String
yearStart(int offset
) {
LocalDate localDate
= LocalDate
.now()
.plusYears(offset
).with(TemporalAdjusters
.firstDayOfYear());
ZoneId zoneId
= ZoneId
.systemDefault();
ZonedDateTime zonedDate
= localDate
.atStartOfDay(zoneId
);
Date date
= Date
.from(zonedDate
.toInstant());
return dateToString(date
, DEFAULT_DATE_LONG_PATTERN
);
}
public static Date
yearStartDate(int offset
) {
LocalDate localDate
= LocalDate
.now()
.plusYears(offset
).with(TemporalAdjusters
.firstDayOfYear());
ZoneId zoneId
= ZoneId
.systemDefault();
ZonedDateTime zonedDate
= localDate
.atStartOfDay(zoneId
);
return Date
.from(zonedDate
.toInstant());
}
public static Set
<String> getSubYearMonth() {
Set
<String> set
= new LinkedHashSet<>();
LocalDate yearStart
= LocalDate
.now()
.with(TemporalAdjusters
.firstDayOfYear());
getSubYearMonth(yearStart
, LocalDate
.now(), set
);
return set
;
}
public static Set
<String> getSubMonth() {
LocalDateTime start
= LocalDateTime
.now()
.with(TemporalAdjusters
.firstDayOfYear());
Set
<String> set
= new LinkedHashSet<>();
int startMonthValue
= start
.getMonthValue();
int endMonthValue
= LocalDateTime
.now().getMonthValue();
for (int i
= startMonthValue
; i
<= endMonthValue
; i
++) {
set
.add(MONTH
[i
- 1]);
}
return set
;
}
public static LocalDate
long2LocalDate(Long timestamp
) {
return LocalDateTime
.ofInstant(Instant
.ofEpochMilli(timestamp
), ZoneId
.systemDefault())
.toLocalDate();
}
}