日期的操作相关工具类
- 日期常量类
public interface DateConstants {
String DATETIME_ALL_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
String NO_SECOND_DATETIME_PATTERN = "yyyy-MM-dd HH:mm";
String NO_SECOND_MINUTE_DATETIME_PATTERN = "yyyy-MM-dd HH";
String DATE_PATTERN = "yyyy-MM-dd";
String NO_DAY_DATE_PATTERN = "yyyy-MM";
String YEAR_PATTERN = "yyyy";
String MONTH_PATTERN = "MM";
String DAY_PATTERN = "dd";
String TIME_PATTERN = "HH:mm:ss";
String NO_SECOND_TIME_PATTERN = "HH:mm";
String HOUR_PATTERN = "HH";
String MINUTE_PATTERN = "mm";
String SECOND_PATTERN = "ss";
String DATETIME_PATTERN_WITH_SLASH = "yyyy/MM/dd HH:mm:ss";
String DATE_PATTERN_WITH_SLASH = "yyyy/MM/dd";
String UNSIGNED_DATETIME_PATTERN = "yyyyMMddHHmmss";
String UNSIGNED_DATE_PATTERN = "yyyyMMdd";
String UNSIGNED_MONTH_PATTERN = "yyyyMM";
String WEEK_PATTERN = "E";
String START_TIME = "00:00:00";
String END_TIME = "23:59:59";
long MILLISECONDS_PER_MINU = 60000L;
long MILLISECONDS_PER_HOUR = 3600000L;
long MILLISECONDS_PER_SECONDS = 1000L;
long MILLISECONDS_PER_DAY = 86400000L;
long SECONDS_PER_MINUTE = 60L;
long SECONDS_PER_HOUR = 3600L;
long SECONDS_PER_DAY = 86400L;
long SECONDS_PER_WEEK = 604800L;
long SECONDS_PER_MONTH = 2592000L;
long SECONDS_PER_YEAR = 31536000L;
long DAYS_PER_WEEK = 7L;
Integer SPRING = 1;
Integer SUMMER = 2;
Integer AUTUMN = 3;
Integer WINTER = 4;
String MONDAY = "星期一";
String TUESDAY = "星期二";
String WEDNESDAY = "星期三";
String THURSDAY = "星期四";
String FRIDAY = "星期五";
String SATURDAY = "星期六";
String SUNDAY = "星期日";
}
- 方法
public class DateUtils {
public static String getDateTimeStr() {
return format(new Date(), DateConstants.DATETIME_PATTERN);
}
public static String getDateStr() {
return format(new Date(), DateConstants.DATE_PATTERN);
}
public static String getTimeStr() {
return format(new Date(), DateConstants.TIME_PATTERN);
}
public static String getYearStr() {
return format(new Date(), DateConstants.YEAR_PATTERN);
}
public static String getMonthStr() {
return format(new Date(), DateConstants.MONTH_PATTERN);
}
public static String getDayStr() {
return format(new Date(), DateConstants.DAY_PATTERN);
}
public static String getHourStr() {
return format(new Date(), DateConstants.HOUR_PATTERN);
}
public static String getMinuteStr() {
return format(new Date(), DateConstants.MINUTE_PATTERN);
}
public static String getSecondStr() {
return format(new Date(), DateConstants.SECOND_PATTERN);
}
public static String getDayOfWeekStr() {
return format(new Date(), DateConstants.WEEK_PATTERN);
}
public static String format(Date date, String pattern) {
return new SimpleDateFormat(pattern).format(date);
}
public static String getDateTimeStr(long timestamp, String pattern) {
return new SimpleDateFormat(pattern).format(timestamp);
}
public static Date parse(String dateStr, String pattern) {
Date date = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
dateFormat.setLenient(false);
try {
date = dateFormat.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static String getDayOfWeekStr(Date date) {
String[] weekOfDays = {DateConstants.SUNDAY, DateConstants.MONDAY, DateConstants.TUESDAY, DateConstants.WEDNESDAY, DateConstants.THURSDAY, DateConstants.FRIDAY, DateConstants.SATURDAY};
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int num = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return weekOfDays[num];
}
public static Date addYears(Date date, int num) {
return add(date, num, Calendar.YEAR);
}
public static Date addYears(int num) {
return add(new Date(), num, Calendar.YEAR);
}
public static Date addMonths(Date date, int num) {
return add(date, num, Calendar.MONTH);
}
public static Date addMonths(int num) {
return add(new Date(), num, Calendar.MONTH);
}
public static Date addWeeks(Date date, int num) {
return add(date, num, Calendar.WEEK_OF_YEAR);
}
public static Date addWeeks(int num) {
return add(new Date(), num, Calendar.WEEK_OF_YEAR);
}
public static Date addDays(Date date, int num) {
return add(date, num, Calendar.DAY_OF_MONTH);
}
public static Date addDays(int num) {
return add(new Date(), num, Calendar.DAY_OF_MONTH);
}
public static Date addHours(Date date, int num) {
return add(date, num, Calendar.HOUR_OF_DAY);
}
public static Date addHours(int num) {
return add(new Date(), num, Calendar.HOUR_OF_DAY);
}
public static Date addMinutes(Date date, int num) {
return add(date, num, Calendar.MINUTE);
}
public static Date addMinutes(int num) {
return add(new Date(), num, Calendar.MINUTE);
}
public static Date addSeconds(Date date, int num) {
return add(date, num, Calendar.SECOND);
}
public static Date addSeconds(int num) {
return add(new Date(), num, Calendar.SECOND);
}
public static Date addMilliSeconds(Date date, int num) {
return add(date, num, Calendar.MILLISECOND);
}
public static Date addMilliSeconds(int num) {
return add(new Date(), num, Calendar.MILLISECOND);
}
public static Date add(Date date, int num, int unit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(unit, num);
return calendar.getTime();
}
public static int getYearsBetween(Date startDate, Date endDate) {
return getMonthsBetween(startDate, endDate) / 12;
}
public static int getMonthsBetween(Date startDate, Date endDate) {
int months;
int flag = 0;
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endDate);
if (endCalendar.equals(startCalendar)) {
return 0;
}
if (startCalendar.after(endCalendar)) {
Calendar temp = startCalendar;
startCalendar = endCalendar;
endCalendar = temp;
}
if (endCalendar.get(Calendar.DAY_OF_MONTH) < startCalendar.get(Calendar.DAY_OF_MONTH)) {
flag = 1;
}
if (endCalendar.get(Calendar.YEAR) > startCalendar.get(Calendar.YEAR)) {
months = ((endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR))
* 12 + endCalendar.get(Calendar.MONTH) - flag)
- startCalendar.get(Calendar.MONTH);
} else {
months = endCalendar.get(Calendar.MONTH)
- startCalendar.get(Calendar.MONTH) - flag;
}
return months;
}
public static long getWeeksBetween(Date startDate, Date endDate) {
return getDaysBetween(startDate, endDate) / DateConstants.DAYS_PER_WEEK;
}
public static long getDaysBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / DateConstants.MILLISECONDS_PER_DAY;
}
public static long getHoursBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / DateConstants.MILLISECONDS_PER_HOUR;
}
public static long getMinutesBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / DateConstants.MILLISECONDS_PER_MINU;
}
public static long getSecondsBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / DateConstants.MILLISECONDS_PER_SECONDS;
}
public static String getIntervalByDate(Date date) {
long secondsBetween = getSecondsBetween(date, new Date());
return getIntervalBySeconds(secondsBetween);
}
public static String getIntervalBySeconds(long seconds) {
StringBuffer buffer = new StringBuffer();
if (seconds < DateConstants.SECONDS_PER_MINUTE) {
buffer.append(seconds).append("秒前");
} else if (seconds < DateConstants.SECONDS_PER_HOUR) {
buffer.append((long) Math.floor(seconds / DateConstants.SECONDS_PER_MINUTE)).append("分钟前");
} else if (seconds < DateConstants.SECONDS_PER_DAY) {
buffer.append((long) Math.floor(seconds / DateConstants.SECONDS_PER_HOUR)).append("小时前");
} else if (seconds < DateConstants.SECONDS_PER_WEEK) {
buffer.append((long) Math.floor(seconds / DateConstants.SECONDS_PER_DAY)).append("天前");
} else if (seconds < DateConstants.SECONDS_PER_MONTH) {
buffer.append((long) Math.floor(seconds / DateConstants.SECONDS_PER_WEEK)).append("周前");
} else if (seconds < DateConstants.SECONDS_PER_YEAR) {
buffer.append((long) Math.floor(seconds / DateConstants.SECONDS_PER_MONTH)).append("月前");
} else {
buffer.append((long) Math.floor(seconds / DateConstants.SECONDS_PER_YEAR)).append("年前");
}
return buffer.toString();
}
public static Calendar getCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
public static String getUtcTimeStr() {
StringBuffer utcTimeBuffer = new StringBuffer();
Calendar cal = Calendar.getInstance();
int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
int dstOffset = cal.get(Calendar.DST_OFFSET);
cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
utcTimeBuffer.append(year).append("-").append(month).append("-").append(day);
utcTimeBuffer.append(" ").append(hour).append(":").append(minute);
try {
SimpleDateFormat sdf = new SimpleDateFormat(DateConstants.NO_SECOND_DATETIME_PATTERN);
sdf.parse(utcTimeBuffer.toString());
} catch (ParseException e) {
e.printStackTrace();
}
return utcTimeBuffer.toString();
}
public static String timestampToStr(Timestamp timestamp) {
return timestamp.toString().substring(0, 19);
}
public static boolean compareNowDate(String dateStr, String pattern) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
Date date = simpleDateFormat.parse(dateStr);
return date.after(new Date());
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
public static boolean compareDate(String startDateStr, String endDateStr, String pattern) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
Date startDate = simpleDateFormat.parse(startDateStr);
Date endDate = simpleDateFormat.parse(endDateStr);
return endDate.after(startDate);
} catch (ParseException e) {
e.printStackTrace();
}
return false;
}
public static boolean compareDate(Date startDate, Date endDate) {
return endDate.after(startDate);
}
public static boolean isValidDate(String dateStr) {
boolean convertSuccess = true;
SimpleDateFormat format = new SimpleDateFormat(DateConstants.DATETIME_PATTERN);
try {
format.setLenient(false);
format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
convertSuccess = false;
}
return convertSuccess;
}
public static boolean isLastDayofMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, (calendar.get(Calendar.DATE) + 1));
if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {
return true;
}
return false;
}
public static String getYearStartTimeStr() {
return getDateTimeStr(getStartDayOfYear(new Date()));
}
public static String getYearEndTimeStr() {
return getDateTimeStr(getEndDayOfYear(new Date()));
}
public static String getYearStartTimeStr(Date date) {
return getDateTimeStr(getStartDayOfYear(date));
}
public static String getYearEndTimeStr(Date date) {
return getDateTimeStr(getEndDayOfYear(date));
}
public static String getMonthStartTimeStr() {
return getDateTimeStr(getStartDayOfMonth(new Date()));
}
public static String getMonthEndTimeStr() {
return getDateTimeStr(getEndDayOfMonth(new Date()));
}
public static String getMonthStartTimeStr(Date date) {
return getDateTimeStr(getStartDayOfMonth(date));
}
public static String getMonthEndTimeStr(Date date) {
return getDateTimeStr(getEndDayOfMonth(date));
}
public static String getWeekStartTimeStr() {
return getDateTimeStr(getStartDayOfWeek(new Date()));
}
public static String getWeekEndTimeStr() {
return getDateTimeStr(getEndDayOfWeek(new Date()));
}
public static String getWeekStartTimeStr(Date date) {
return getDateTimeStr(getStartDayOfWeek(date));
}
public static String getWeekEndTimeStr(Date date) {
return getDateTimeStr(getEndDayOfWeek(date));
}
public static String getTodayStartTimeStr() {
return getDateTimeStr(getTodayStartTime(new Date()));
}
public static String getTodayEndTimeStr() {
return getDateTimeStr(getTodayEndTime(new Date()));
}
public static String getTodayStartTimeStr(Date date) {
return getDateTimeStr(getTodayStartTime(date));
}
public static String getTodayEndTimeStr(Date date) {
return getDateTimeStr(getTodayEndTime(date));
}
public static String getDateStartTimeStr(Date date) {
String result = format(date, DateConstants.DATE_PATTERN);
return result.concat(" ").concat(DateConstants.START_TIME);
}
public static String getDateEndTimeStr(Date date) {
String result = format(date, DateConstants.DATE_PATTERN);
return result.concat(" ").concat(DateConstants.END_TIME);
}
public static String getDateTimeStr(Calendar calendar) {
StringBuffer buf = new StringBuffer("");
buf.append(calendar.get(Calendar.YEAR));
buf.append("-");
buf.append(calendar.get(Calendar.MONTH) + 1 > 9 ? calendar.get(Calendar.MONTH) + 1 + ""
: "0" + (calendar.get(Calendar.MONTH) + 1));
buf.append("-");
buf.append(calendar.get(Calendar.DAY_OF_MONTH) > 9 ? calendar.get(Calendar.DAY_OF_MONTH) + ""
: "0" + calendar.get(Calendar.DAY_OF_MONTH));
buf.append(" ");
buf.append(calendar.get(Calendar.HOUR_OF_DAY) > 9 ? calendar.get(Calendar.HOUR_OF_DAY) + ""
: "0" + calendar.get(Calendar.HOUR_OF_DAY));
buf.append(":");
buf.append(calendar.get(Calendar.MINUTE) > 9 ? calendar.get(Calendar.MINUTE) + ""
: "0" + calendar.get(Calendar.MINUTE));
buf.append(":");
buf.append(calendar.get(Calendar.SECOND) > 9 ? calendar.get(Calendar.SECOND) + ""
: "0" + calendar.get(Calendar.SECOND));
return buf.toString();
}
public static Calendar getStartDayOfYear(Date date) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_YEAR, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar;
}
public static Calendar getEndDayOfYear(Date date) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTime(date);
int i = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
calendar.set(Calendar.DAY_OF_YEAR, i);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar;
}
public static Calendar getStartDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar;
}
public static Calendar getEndDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
calendar.setTime(date);
int i = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, i);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar;
}
public static Calendar getStartDayOfWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar;
}
public static Calendar getEndDayOfWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar;
}
public static Calendar getTodayStartTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(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;
}
public static Calendar getTodayEndTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar;
}
public static List<String> getDateStrList(String startDateStr, String endDateStr, String pattern) {
Date start = parse(startDateStr, pattern);
Date end = parse(endDateStr, pattern);
return getDateStrList(start, end, pattern);
}
public static List<String> getDateStrList(Date startDate, Date endDate, String pattern) {
List<String> result = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
if (DateConstants.DATE_PATTERN.equals(pattern)) {
while (startDate.before(endDate) || startDate.equals(endDate)) {
result.add(new SimpleDateFormat(DateConstants.DATE_PATTERN).format(calendar.getTimeInMillis()));
calendar.add(Calendar.DATE, 1);
startDate = calendar.getTime();
}
} else if (DateConstants.MONTH_PATTERN.equals(pattern)) {
while (startDate.before(endDate) || startDate.equals(endDate)) {
result.add(new SimpleDateFormat(DateConstants.MONTH_PATTERN).format(calendar.getTimeInMillis()));
calendar.add(Calendar.MONTH, 1);
startDate = calendar.getTime();
}
} else if (DateConstants.YEAR_PATTERN.equals(pattern)) {
while (startDate.before(endDate) || startDate.equals(endDate)) {
result.add(new SimpleDateFormat(DateConstants.YEAR_PATTERN).format(calendar.getTimeInMillis()));
calendar.add(Calendar.YEAR, 1);
startDate = calendar.getTime();
}
}
return result;
}
public static List<String> getDateStrList(int num) {
return getDateStrList(new Date(), num, DateConstants.DATE_PATTERN);
}
public static List<String> getDateStrList(Date date, int num) {
return getDateStrList(date, num, DateConstants.DATE_PATTERN);
}
public static List<String> getDateStrList(Date date, int num, String pattern) {
List<String> result = new ArrayList<>();
Calendar c = Calendar.getInstance();
c.setTime(date);
boolean flag = false;
if (num < 0) {
num = Math.abs(num);
flag = true;
}
for (int i = 0; i < num; i++) {
result.add(new SimpleDateFormat(pattern).format(c.getTimeInMillis()));
c.add(Calendar.DATE, flag ? -1 : 1);
}
if (flag) {
Collections.reverse(result);
}
return result;
}
}