文章目錄
這是我總結的Java7日期工具類,應該是比較全面的,滿足日常開發絕大部分需求,分享給大家,有錯誤之處,還望大神指教,
/**
* 日期時間工具類
*
* @author JourWon
* @date 2020/12/5
*/
public class DateUtils {
/**
* 顯示年月日時分秒,例如 2015-08-11 09:51:53.
*/
public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* 顯示年月日時分,例如 2015-08-11 09:51.
*/
public static final String NO_SECOND_DATETIME_PATTERN = "yyyy-MM-dd HH:mm";
/**
* 僅顯示年月日,例如 2015-08-11.
*/
public static final String DATE_PATTERN = "yyyy-MM-dd";
/**
* 僅顯示時分秒,例如 09:51:53.
*/
public static final String TIME_PATTERN = "HH:mm:ss";
/**
* 顯示年月日時分秒(由/分割),例如 2015/08/11 09:51:53.
*/
public static final String DATETIME_PATTERN_WITH_SLASH = "yyyy/MM/dd HH:mm:ss";
/**
* 顯示年月日(由/分割),例如 2015/08/11.
*/
public static final String DATE_PATTERN_WITH_SLASH = "yyyy/MM/dd";
/**
* 顯示年月日時分秒(無符號),例如 20150811095153.
*/
public static final String UNSIGNED_DATETIME_PATTERN = "yyyyMMddHHmmss";
/**
* 僅顯示年月日(無符號),例如 20150811.
*/
public static final String UNSIGNED_DATE_PATTERN = "yyyyMMdd";
/**
* 僅顯示年(無符號),例如 2015.
*/
private static final String YEAR_PATTERN = "yyyy";
/**
* 僅顯示年月,例如 2015-08.
*/
private static final String MONTH_PATTERN = "yyyy-MM";
/**
* 僅顯示年月(無符號),例如 201508.
*/
private static final String UNSIGNED_MONTH_PATTERN = "yyyyMM";
/**
* 一天的開始時間,僅顯示時分秒
*/
private static final String START_TIME = "00:00:00";
/**
* 一天的結束時間,僅顯示時分秒
*/
private static final String END_TIME = "23:59:59";
/**
* 每天的毫秒數.
*/
public static final long MILLISECONDS_PER_DAY = 86400000L;
/**
* 每小時毫秒數.
*/
public static final long MILLISECONDS_PER_HOUR = 3600000L;
/**
* 每分鐘毫秒數.
*/
public static final long MILLISECONDS_PER_MINU = 60000L;
/**
* 每秒的毫秒數.
*/
public static final long MILLISECONDS_PER_SECONDS = 1000L;
/**
* 每分鐘秒數.
*/
public static final long SECONDS_PER_MINUTE = 60L;
/**
* 每小時秒數.
*/
public static final long SECONDS_PER_HOUR = 3600L;
/**
* 每天秒數.
*/
public static final long SECONDS_PER_DAY = 86400L;
/**
* 每周秒數.
*/
public static final long SECONDS_PER_WEEK = 604800L;
/**
* 每個月秒數,默認每月30天.
*/
public static final long SECONDS_PER_MONTH = 2592000L;
/**
* 每年秒數,默認每年365天.
*/
public static final long SECONDS_PER_YEAR = 31536000L;
/**
* 每周的天數.
*/
public static final long DAYS_PER_WEEK = 7L;
/**
* 春天;
*/
public static final Integer SPRING = 1;
/**
* 夏天;
*/
public static final Integer SUMMER = 2;
/**
* 秋天;
*/
public static final Integer AUTUMN = 3;
/**
* 冬天;
*/
public static final Integer WINTER = 4;
/**
* 星期日;
*/
public static final String SUNDAY = "星期日";
/**
* 星期一;
*/
public static final String MONDAY = "星期一";
/**
* 星期二;
*/
public static final String TUESDAY = "星期二";
/**
* 星期三;
*/
public static final String WEDNESDAY = "星期三";
/**
* 星期四;
*/
public static final String THURSDAY = "星期四";
/**
* 星期五;
*/
public static final String FRIDAY = "星期五";
/**
* 星期六;
*/
public static final String SATURDAY = "星期六";
/**
* 獲取當前日期和時間字串.
*
* @return String 日期時間字串,例如 2015-08-11 09:51:53
*/
public static String getDateTimeStr() {
return format(new Date(), DATETIME_PATTERN);
}
/**
* 獲取當前日期字串.
*
* @return String 日期字串,例如2015-08-11
*/
public static String getDateStr() {
return format(new Date(), DATE_PATTERN);
}
/**
* 獲取當前時間字串.
*
* @return String 時間字串,例如 09:51:53
*/
public static String getTimeStr() {
return format(new Date(), TIME_PATTERN);
}
/**
* 獲取當前年份字串.
*
* @return String 當前年份字串,例如 2015
*/
public static String getYearStr() {
return format(new Date(), YEAR_PATTERN);
}
/**
* 獲取當前月份字串.
*
* @return String 當前月份字串,例如 08
*/
public static String getMonthStr() {
return format(new Date(), "MM");
}
/**
* 獲取當前天數字串.
*
* @return String 當前天數字串,例如 11
*/
public static String getDayStr() {
return format(new Date(), "dd");
}
/**
* 獲取當前星期字串.
*
* @return String 當前星期字串,例如 星期二
*/
public static String getDayOfWeekStr() {
return format(new Date(), "E");
}
/**
* 獲取指定日期是星期幾
*
* @param date 日期
* @return String 星期幾
*/
public static String getDayOfWeekStr(Date date) {
String[] weekOfDays = {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int num = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return weekOfDays[num];
}
/**
* 獲取當前小時字串.
*
* @return String 當前小時字串,例如09
*/
public static String getHourStr() {
return format(new Date(), "HH");
}
/**
* 獲取當前分鐘字串.
*
* @return String 當前分鐘字串,例如51
*/
public static String getMinuteStr() {
return format(new Date(), "mm");
}
/**
* 獲取當前秒鐘字串.
*
* @return String 當前秒鐘字串,例如53
*/
public static String getSecondStr() {
return format(new Date(), "ss");
}
/**
* 獲取日期時間字串
*
* @param date 需要轉化的日期時間
* @param pattern 時間格式
* @return String 日期時間字串,例如 2015-08-11 09:51:53
*/
public static String format(Date date, String pattern) {
return new SimpleDateFormat(pattern).format(date);
}
/**
* 時間戳轉換為日期時間字串
*
* @param timestamp 時間戳
* @param pattern 日期格式 例如DATETIME_PATTERN
* @return String 日期時間字串,例如 2015-08-11 09:51:53
*/
public static String getDateTimeStr(long timestamp, String pattern) {
return new SimpleDateFormat(pattern).format(timestamp);
}
/**
* 日期字串轉換為日期(java.util.Date)
*
* @param dateStr 日期字串
* @param pattern 日期格式 例如DATETIME_PATTERN
* @return Date 日期
*/
public static Date parse(String dateStr, String pattern) {
Date date = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
// 設定lenient為false. 否則SimpleDateFormat會比較寬松地驗證日期,比如2007/02/29會被接受,并轉換成2007/03/01
dateFormat.setLenient(false);
try {
date = dateFormat.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 獲取指定日期num年數之后的日期.
*
* @param num 間隔年數(負數表示之前)
* @return Date 日期
*/
public static Date addYears(Date date, int num) {
return add(date, num, Calendar.YEAR);
}
/**
* 獲取當前日期指定年數之后的日期.
*
* @param num 間隔年數(負數表示之前)
* @return Date 日期
*/
public static Date addYears(int num) {
return add(new Date(), num, Calendar.YEAR);
}
/**
* 獲取當前日期num月數之后的日期.
*
* @param num 間隔月數(負數表示之前)
* @return Date 日期
*/
public static Date addMonths(Date date, int num) {
return add(date, num, Calendar.MONTH);
}
/**
* 獲取當前日期指定月數之后的日期.
*
* @param num 間隔月數(負數表示之前)
* @return Date 日期
*/
public static Date addMonths(int num) {
return add(new Date(), num, Calendar.MONTH);
}
/**
* 獲取指定日期num周數之后的日期.
*
* @param date 日期
* @param num 周數(負數表示之前)
* @return Date 新的日期
*/
public static Date addWeeks(Date date, int num) {
return add(date, num, Calendar.WEEK_OF_YEAR);
}
/**
* 獲取當前日期指定周數之后的日期.
*
* @param num 周數(負數表示之前)
* @return Date 新的日期
*/
public static Date addWeeks(int num) {
return add(new Date(), num, Calendar.WEEK_OF_YEAR);
}
/**
* 獲取指定日期num天數之后的日期.
*
* @param date 日期
* @param num 天數(負數表示之前)
* @return Date 新的日期
*/
public static Date addDays(Date date, int num) {
return add(date, num, Calendar.DAY_OF_MONTH);
}
/**
* 獲取當前日期指定天數之后的日期.
*
* @param num 天數(負數表示之前)
* @return Date 新的日期
*/
public static Date addDays(int num) {
return add(new Date(), num, Calendar.DAY_OF_MONTH);
}
/**
* 獲取指定日期num小時之后的日期.
*
* @param date 日期
* @param num 小時數(負數表示之前)
* @return Date 新的日期
*/
public static Date addHours(Date date, int num) {
return add(date, num, Calendar.HOUR_OF_DAY);
}
/**
* 獲取當前日期指定小時之后的日期.
*
* @param num 小時數(負數表示之前)
* @return Date 新的日期
*/
public static Date addHours(int num) {
return add(new Date(), num, Calendar.HOUR_OF_DAY);
}
/**
* 獲取指定日期num分鐘之后的日期.
*
* @param date 日期
* @param num 分鐘數(負數表示之前)
* @return Date 新的日期
*/
public static Date addMinutes(Date date, int num) {
return add(date, num, Calendar.MINUTE);
}
/**
* 獲取當前日期指定分鐘之后的日期.
*
* @param num 分鐘數(負數表示之前)
* @return Date 新的日期
*/
public static Date addMinutes(int num) {
return add(new Date(), num, Calendar.MINUTE);
}
/**
* 獲取指定日期num秒鐘之后的日期.
*
* @param date 日期
* @param num 秒鐘數(負數表示之前)
* @return Date 新的日期
*/
public static Date addSeconds(Date date, int num) {
return add(date, num, Calendar.SECOND);
}
/**
* 獲取當前日期指定秒鐘之后的日期.
*
* @param num 秒鐘數(負數表示之前)
* @return Date 新的日期
*/
public static Date addSeconds(int num) {
return add(new Date(), num, Calendar.SECOND);
}
/**
* 獲取指定日期num毫秒之后的日期.
*
* @param date 日期
* @param num 毫秒數(負數表示之前)
* @return Date 新的日期
*/
public static Date addMilliSeconds(Date date, int num) {
return add(date, num, Calendar.MILLISECOND);
}
/**
* 獲取當前日期指定毫秒之后的日期.
*
* @param num 毫秒數(負數表示之前)
* @return Date 新的日期
*/
public static Date addMilliSeconds(int num) {
return add(new Date(), num, Calendar.MILLISECOND);
}
/**
* 獲取當前日期指定數量日期時間單位之后的日期.
*
* @param date 日期
* @param num 數量
* @param unit 日期時間單位
* @return Date 新的日期
*/
public static Date add(Date date, int num, int unit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(unit, num);
return calendar.getTime();
}
/**
* 計算兩個日期之間相隔年數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return int 相隔年數,向下取整
*/
public static int getYearsBetween(Date startDate, Date endDate) {
return getMonthsBetween(startDate, endDate) / 12;
}
/**
* 計算兩個日期之間相隔月數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return int 相隔月數,向下取整
*/
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;
}
/**
* 計算兩個日期之間相隔周數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return long 相隔周數,向下取整
*/
public static long getWeeksBetween(Date startDate, Date endDate) {
return getDaysBetween(startDate, endDate) / DAYS_PER_WEEK;
}
/**
* 計算兩個日期之間相隔天數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return long 相隔天數,向下取整
*/
public static long getDaysBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_DAY;
}
/**
* 計算兩個日期之間相隔小時數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return long 相隔小時數,向下取整
*/
public static long getHoursBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_HOUR;
}
/**
* 計算兩個日期之間相隔分鐘數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return long 相隔分鐘數,向下取整
*/
public static long getMinutesBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_MINU;
}
/**
* 計算兩個日期之間相隔秒數.
*
* @param startDate 開始日期
* @param endDate 結束日期
* @return long 相隔秒數,向下取整
*/
public static long getSecondsBetween(Date startDate, Date endDate) {
return (endDate.getTime() - startDate.getTime()) / MILLISECONDS_PER_SECONDS;
}
/**
* 獲取當前季度.
* 注意:3~5月為春季 1,6~8月為夏季 2,9~11月為秋季 3,12~2月為冬季 4
*
* @return int 當前季度數
*/
public static int getCurrentSeason() {
Calendar calendar = Calendar.getInstance();
int month = calendar.get(Calendar.MONTH) + 1;
int season = 0;
if (month >= 3 && month <= 5) {
season = SPRING;
} else if (month >= 6 && month <= 8) {
season = SUMMER;
} else if (month >= 9 && month <= 11) {
season = AUTUMN;
} else if (month == 12 || month >= 1 && month <= 2) {
season = WINTER;
}
return season;
}
/**
* 獲取當前日期與之前日期的時間間隔.
*
* @param date 之前的日期
* @return String 例如 16分鐘前、2小時前、3天前、4月前、5年前等
*/
public static String getIntervalByDate(Date date) {
long secondsBetween = getSecondsBetween(date, new Date());
return getIntervalBySeconds(secondsBetween);
}
/**
* 將以秒為單位的時間轉換為其他單位.
*
* @param seconds 秒數
* @return String 例如 16分鐘前、2小時前、3天前、4月前、5年前等
*/
public static String getIntervalBySeconds(long seconds) {
StringBuffer buffer = new StringBuffer();
if (seconds < SECONDS_PER_MINUTE) {
buffer.append(seconds).append("秒前");
} else if (seconds < SECONDS_PER_HOUR) {
buffer.append((long) Math.floor(seconds / SECONDS_PER_MINUTE)).append("分鐘前");
} else if (seconds < SECONDS_PER_DAY) {
buffer.append((long) Math.floor(seconds / SECONDS_PER_HOUR)).append("小時前");
} else if (seconds < SECONDS_PER_WEEK) {
buffer.append((long) Math.floor(seconds / SECONDS_PER_DAY)).append("天前");
} else if (seconds < SECONDS_PER_MONTH) {
buffer.append((long) Math.floor(seconds / SECONDS_PER_WEEK)).append("周前");
} else if (seconds < SECONDS_PER_YEAR) {
buffer.append((long) Math.floor(seconds / SECONDS_PER_MONTH)).append("月前");
} else {
buffer.append((long) Math.floor(seconds / SECONDS_PER_YEAR)).append("年前");
}
return buffer.toString();
}
/**
* 將 Date 日期轉化為 Calendar 型別日期.
*
* @param date 指定日期
* @return Calendar Calendar物件
*/
public static Calendar getCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
/**
* 得到UTC時間,型別為字串,格式為"yyyy-MM-dd HH:mm"
* 如果獲取失敗,回傳null
*
* @return
*/
public static String getUTCTimeStr() {
StringBuffer UTCTimeBuffer = new StringBuffer();
// 1、取得本地時間:
Calendar cal = Calendar.getInstance();
// 2、取得時間偏移量:
int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
// 3、取得夏令時差:
int dstOffset = cal.get(Calendar.DST_OFFSET);
// 4、從本地時間里扣除這些差量,即可以取得UTC時間:
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(NO_SECOND_DATETIME_PATTERN);
sdf.parse(UTCTimeBuffer.toString());
return UTCTimeBuffer.toString();
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 將Timestamp轉換為yyyy-MM-dd HH:mm:ss格式字串
*
* @param timestamp
* @return
*/
public static String timestampToStr(Timestamp timestamp) {
return timestamp.toString().substring(0, 19);
}
/**
* 比較傳進來的日期是否大于當前日期,如果傳進來的日期大于當前日期則回傳true,否則回傳false
*
* @param dateStr 日期字串
* @param pattern 日期格式
* @return boolean
*/
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;
}
/**
* 如果endDateStr>startDateStr,回傳true,否則回傳false
*
* @param startDateStr 開始日期字串
* @param endDateStr 結束日期字串
* @param pattern 日期格式
* @return boolean
*/
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;
}
/**
* 如果startDate>endDate,回傳true,否則回傳false
*
* @param startDate 開始日期字串
* @param endDate 結束日期字串
* @return boolean
*/
public static boolean compareDate(Date startDate, Date endDate) {
return endDate.after(startDate);
}
/**
* 判斷日期是否合法
*
* @param dateStr yyyy-MM-dd HH:mm:ss格式日期字串
* @return
*/
public static boolean isValidDate(String dateStr) {
boolean convertSuccess = true;
// 指定日期格式為四位年/兩位月份/兩位日期
SimpleDateFormat format = new SimpleDateFormat(DATETIME_PATTERN);
try {
// 設定lenient為false. 否則SimpleDateFormat會比較寬松地驗證日期,比如2007/02/29會被接受,并轉換成2007/03/01
format.setLenient(false);
format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就說明格式不對
convertSuccess = false;
}
return convertSuccess;
}
/**
* 判斷日期是否為月底最后一天
*
* @param date 日期
* @return boolean true:是 false:否
*/
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;
}
/**
* 獲取本年第一天的日期字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getYearStartTimeStr() {
return getDateTimeStr(getStartDayOfYear(new Date()));
}
/**
* 獲取指定日期當年第一天的日期字串
*
* @param date
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getYearStartTimeStr(Date date) {
return getDateTimeStr(getStartDayOfYear(date));
}
/**
* 獲取本年最后一天的日期字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getYearEndTimeStr() {
return getDateTimeStr(getEndDayOfYear(new Date()));
}
/**
* 獲取指定日期當年最后一天的日期字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getYearEndTimeStr(Date date) {
return getDateTimeStr(getEndDayOfYear(date));
}
/**
* 獲取本月第一天的日期字串
* 格式:yyyy-MM-dd HH:mm:ss
*
* @return
*/
public static String getMonthStartTimeStr() {
return getDateTimeStr(getStartDayOfMonth(new Date()));
}
/**
* 獲取指定日期當月第一天的日期字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getMonthStartTimeStr(Date date) {
return getDateTimeStr(getStartDayOfMonth(date));
}
/**
* 獲取本月最后一天的日期字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getMonthEndTimeStr() {
return getDateTimeStr(getEndDayOfMonth(new Date()));
}
/**
* 獲取指定日期當月最后一天的日期字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getMonthEndTimeStr(Date date) {
return getDateTimeStr(getEndDayOfMonth(date));
}
/**
* 獲取本周第一天的日期字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getWeekStartTimeStr() {
return getDateTimeStr(getStartDayOfWeek(new Date()));
}
/**
* 獲取指定日期當周第一天的日期字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getWeekStartTimeStr(Date date) {
return getDateTimeStr(getStartDayOfWeek(date));
}
/**
* 獲取本周最后一天的日期字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getWeekEndTimeStr() {
return getDateTimeStr(getEndDayOfWeek(new Date()));
}
/**
* 獲取指定日期當周最后一天的日期字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getWeekEndTimeStr(Date date) {
return getDateTimeStr(getEndDayOfWeek(date));
}
/**
* 獲取今天的開始時間字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getTodayStartTimeStr() {
return getDateTimeStr(getTodayStartTime(new Date()));
}
/**
* 獲取指定日期的開始時間字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getTodayStartTimeStr(Date date) {
return getDateTimeStr(getTodayStartTime(date));
}
/**
* 獲取今天的結束時間字串
*
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getTodayEndTimeStr() {
return getDateTimeStr(getTodayEndTime(new Date()));
}
/**
* 獲取指定日期的結束時間字串
*
* @param date 指定日期
* @return String 格式:yyyy-MM-dd HH:mm:ss
*/
public static String getTodayEndTimeStr(Date date) {
return getDateTimeStr(getTodayEndTime(date));
}
/**
* 獲得指定日期所在日的開始時間字串
*
* @param date 指定日期
* @return String 例如:2020-12-06 00:00:00
*/
public static String getDateStartTimeStr(Date date) {
String result = format(date, DATE_PATTERN);
return result.concat(" ").concat(START_TIME);
}
/**
* 獲得指定日期所在日的結束時間字串
*
* @param date 指定日期
* @return String 例如:2020-12-06 23:59:59
*/
public static String getDateEndTimeStr(Date date) {
String result = format(date, DATE_PATTERN);
return result.concat(" ").concat(END_TIME);
}
/**
* 根據日歷回傳日期時間字串
*
* @param calendar 日歷
* @return String 日期時間字串
*/
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();
}
/**
* 獲取今年的第一天
*
* @return Calendar 日歷
*/
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;
}
/**
* 獲取今年的最后一天
*
* @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;
}
/**
* 獲取本月的第一天
*
* @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;
}
/**
* 獲取本月的最后一天
*
* @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;
}
/**
* 獲取本周的第一天,一個星期的第一天是星期一,最后一天是星期天
*
* @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;
}
/**
* 獲取本周的最后一天,一個星期的第一天是星期一,最后一天是星期天
*
* @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;
}
/**
* 獲取今天開始時間
*
* @return
*/
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;
}
/**
* 獲取今天結束時間
*
* @return
*/
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;
}
/**
* 根據日期范圍,獲取按周期劃分的日期區間
*
* @param startDateStr 開始日期(格式:2020-11-29)
* @param endDateStr 結束日期(格式:2020-12-02)
* @param pattern 日期格式(支持:DATE_PATTERN,MONTH_PATTERN,YEAR_PATTERN)
* @return List<String> 區間集合 例如:[2020-11-29,2020-11-30,2020-12-01,2020-12-02]
*/
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);
}
/**
* 根據日期范圍,獲取按周期劃分的日期區間
*
* @param startDate 開始日期
* @param endDate 結束日期
* @param pattern 日期格式(支持:DATE_PATTERN,MONTH_PATTERN,YEAR_PATTERN)
* @return List<String> 區間集合 例如:[2020-11-29,2020-11-30,2020-12-01,2020-12-02]
*/
public static List<String> getDateStrList(Date startDate, Date endDate, String pattern) {
List<String> result = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
if (DATE_PATTERN.equals(pattern)) {
while (startDate.before(endDate) || startDate.equals(endDate)) {
result.add(new SimpleDateFormat(DATE_PATTERN).format(calendar.getTimeInMillis()));
calendar.add(Calendar.DATE, 1);
startDate = calendar.getTime();
}
} else if (MONTH_PATTERN.equals(pattern)) {
while (startDate.before(endDate) || startDate.equals(endDate)) {
result.add(new SimpleDateFormat(MONTH_PATTERN).format(calendar.getTimeInMillis()));
calendar.add(Calendar.MONTH, 1);
startDate = calendar.getTime();
}
} else if (YEAR_PATTERN.equals(pattern)) {
while (startDate.before(endDate) || startDate.equals(endDate)) {
result.add(new SimpleDateFormat(YEAR_PATTERN).format(calendar.getTimeInMillis()));
calendar.add(Calendar.YEAR, 1);
startDate = calendar.getTime();
}
}
return result;
}
/**
* 獲取當前日期前后num天的集合
*
* @param num 天數(正數:之后;負數:之前)
* @return List<String> 前/后日期的集合(包含指定日期)
*/
public static List<String> getDateStrList(int num) {
return getDateStrList(new Date(), num, DATE_PATTERN);
}
/**
* 獲取指定日期前后num天的集合
*
* @param date 指定日期
* @param num 天數(正數:之后;負數:之前)
* @return List<String> 前/后日期的集合(包含指定日期)
*/
public static List<String> getDateStrList(Date date, int num) {
return getDateStrList(date, num, DATE_PATTERN);
}
/**
* 獲取指定日期前后num天的集合,帶日期格式引數
*
* @param date 指定日期
* @param num 天數(正數:之后;負數:之前)
* @param pattern 日期格式
* @return List<String> 前/后日期的集合(包含指定日期) 例如:[2020-11-29,2020-11-30,2020-12-01]
*/
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;
}
public static void main(String[] args) {
System.out.println("=======================");
System.out.println(getYearStr());
System.out.println(getMonthStr());
System.out.println(getDayStr());
System.out.println(getHourStr());
System.out.println(getMinuteStr());
System.out.println(getSecondStr());
System.out.println(getDateTimeStr());
System.out.println(getDateStr());
System.out.println(getTimeStr());
System.out.println(getDayOfWeekStr());
System.out.println(getDayOfWeekStr(parse("2020-12-05", DATE_PATTERN)));
System.out.println(getDateTimeStr(System.currentTimeMillis(), DATETIME_PATTERN));
System.out.println("=======================");
System.out.println(parse("2020-12-31", DATE_PATTERN));
System.out.println("=======================");
System.out.println(addYears(1));
System.out.println(addYears(new Date(), -1));
System.out.println(addMonths(1));
System.out.println(addMonths(new Date(), -1));
System.out.println(addWeeks(1));
System.out.println(addWeeks(new Date(), -1));
System.out.println(addDays(1));
System.out.println(addDays(new Date(), -1));
System.out.println(addHours(1));
System.out.println(addHours(new Date(), -1));
System.out.println(addMinutes(1));
System.out.println(addMinutes(new Date(), -1));
System.out.println(addSeconds(1));
System.out.println(addSeconds(new Date(), -1));
System.out.println(addMilliSeconds(1));
System.out.println(addMilliSeconds(new Date(), -1));
System.out.println("=======================");
System.out.println(getYearsBetween(parse("2020-01-30", DATE_PATTERN), parse("2021-01-29", DATE_PATTERN)));
System.out.println(getMonthsBetween(parse("2020-01-30", DATE_PATTERN), parse("2021-01-29", DATE_PATTERN)));
System.out.println(getWeeksBetween(parse("2020-01-30", DATE_PATTERN), parse("2020-02-06", DATE_PATTERN)));
System.out.println(getDaysBetween(parse("2020-01-30", DATE_PATTERN), parse("2020-02-06", DATE_PATTERN)));
System.out.println(getHoursBetween(parse("2020-01-30", DATE_PATTERN), parse("2020-02-06", DATE_PATTERN)));
System.out.println(getMinutesBetween(parse("2020-01-30", DATE_PATTERN), parse("2020-02-06", DATE_PATTERN)));
System.out.println(getSecondsBetween(parse("2020-12-06 19:47:00", DATETIME_PATTERN), parse("2020-12-06 19:47:50", DATETIME_PATTERN)));
System.out.println("=======================");
System.out.println(getCurrentSeason());
System.out.println("=======================");
System.out.println(getIntervalByDate(parse("2020-12-06 19:30:00", DATETIME_PATTERN)));
System.out.println(getIntervalBySeconds(604800L));
System.out.println("=======================");
System.out.println(getCalendar(new Date()));
System.out.println(getUTCTimeStr());
System.out.println("=======================");
System.out.println(timestampToStr(new Timestamp(System.currentTimeMillis())));
System.out.println("=======================");
System.out.println(compareNowDate("2020-12-07", DATE_PATTERN));
System.out.println(compareDate(parse("2020-12-05", DATE_PATTERN), new Date()));
System.out.println(compareDate("2020-12-05", "2020-12-06", DATE_PATTERN));
System.out.println("=======================");
System.out.println(isValidDate("2020-02-29 23:59:00"));
System.out.println(isLastDayofMonth(parse("2020-11-01 00:00:00", DATETIME_PATTERN)));
System.out.println("=======================");
System.out.println(getYearStartTimeStr());
System.out.println(getYearStartTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getYearEndTimeStr());
System.out.println(getYearEndTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getMonthStartTimeStr());
System.out.println(getMonthStartTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getMonthEndTimeStr());
System.out.println(getMonthEndTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getWeekStartTimeStr());
System.out.println(getWeekStartTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getWeekEndTimeStr());
System.out.println(getWeekEndTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getTodayStartTimeStr());
System.out.println(getTodayStartTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getTodayEndTimeStr());
System.out.println(getTodayEndTimeStr(parse("2019-12-06", DATE_PATTERN)));
System.out.println(getDateStartTimeStr(parse("2020-11-01 00:00:00", DATETIME_PATTERN)));
System.out.println(getDateEndTimeStr(parse("2020-11-01 00:00:00", DATETIME_PATTERN)));
System.out.println("=======================");
List<String> strList1 = getDateStrList(3);
for (String s : strList1) {
System.out.println(s);
}
System.out.println("=======================");
List<String> dayList = getDateStrList(parse("2020-11-29", DATE_PATTERN), 3);
for (String s : dayList) {
System.out.println(s);
}
System.out.println("=======================");
List<String> dateList = getDateStrList("2020-11-29", "2020-12-06", DATE_PATTERN);
for (String s : dateList) {
System.out.println(s);
}
System.out.println("=======================");
List<String> strList = getDateStrList(parse("2020-11-29", DATE_PATTERN), parse("2020-12-06", DATE_PATTERN), DATE_PATTERN);
for (String s : strList) {
System.out.println(s);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232558.html
標籤:java
