首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java常见日期格式及日期的计算工具类

Java常见日期格式及日期的计算工具类

作者头像
一头小山猪
发布2020-06-15 17:56:13
4.2K0
发布2020-06-15 17:56:13
举报
文章被收录于专栏:微光点亮星辰微光点亮星辰

package com.java.mvc.util;

import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.List;

public class DateUtils {

public final static String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";public final static String FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd hh:mm:ss";public final static String FORMAT_YYYYMMDD = "yyyyMMdd";public final static String FORMAT_YYYYMM = "yyyyMM";public final static String FORMAT_YYYY = "yyyy";public final static String FORMAT_YYYYMMDDHHMISS = "yyyyMMdd HH:mm:ss";public final static String FORMAT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";public final static String FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss";public final static String FORMAT_YYYY_MM_DD_HH_MI_SS_SSS = "yyyy-MM-dd HH:mm:ss:SSS";public final static String FORMAT_YYYY_MM = "yyyy-MM";public final static String FORMAT_DD_HH_MM_SS = "dd HH:mm:ss";public final static String FORMAT_HH_MM_SS = "HH:mm:ss";public static final int USE_YEAR = 1;public static final int USE_MONTH = 2;public static final int USE_DAY = 3;
/**
* 根据相应的格式初始化日期格式对象
* @param pattern
* @return
*/
public static DateFormat getDateFormat(final String pattern) {
   return new SimpleDateFormat(pattern);
}
/**
* 获取距离当前日期第N天的日期,若为days>0则为当前日期后几天,否则为前几天
* @param days
* @return
*/
public static Date getPreviousOrNextDaysOfNow(int days) {
   return getPreviousOrNextDaysOfDate(new Date(), days);
}/**
* 返回当前日期的 格式为: format(yyyy-MM-dd)
* @return
*/
public static String getCurrentDate() {
   Date now = new Date();
   return getDateFormat(FORMAT_YYYY_MM_DD).format(now);
}/**
* 返回指定日期和指定格式日期字符串
* @return
*/
public static String getSpecifyDate(Date date,String pattern) {
   return getDateFormat(pattern).format(date);
}/**
* 返回当前日期的 格式为: format(yyyy-MM-dd HH:MM:SS)
* @return
*/
public static String getCurrentDateTime() {
   Date now = new Date();
   return getDateFormat(FORMAT_YYYY_MM_DD_HH_MM_SS).format(now);
}/**
* Current date with format(yyyy-MM-dd HH:MM:SS:SSS)
* @return
*/
public static String getCurrentDateTimeMilliSecond(Date date) {
   return getDateFormat(FORMAT_YYYY_MM_DD_HH_MI_SS_SSS).format(date);
}/**
* 根据相应时间格式(yyyy-MM-dd HH:MM:SS:SSS)字符串转换为Date
* @return
*/
public static Date getDateByTimeMilliSecond(String date) throws ParseException{
   SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_YYYY_MM_DD_HH_MI_SS_SSS);
   return sdf.parse(date);
}/**
* 根据相应时间格式字符串转换为Date
* @return
*/
public static Date getDateByPattern(String date,String pattern) throws ParseException{
   SimpleDateFormat sdf = new SimpleDateFormat(pattern);
   return sdf.parse(date);
}/**
* 获取当月的第一天
* @return
*/
public static Date getFirstDayOfThisMonth() {
   Calendar nowday = Calendar.getInstance();
   nowday.set(Calendar.DAY_OF_MONTH, 1);
   nowday.set(Calendar.HOUR_OF_DAY, 0);
   nowday.set(Calendar.MINUTE, 0);
   nowday.set(Calendar.SECOND, 0);
   nowday.set(Calendar.MILLISECOND, 0);
   return nowday.getTime();
}
/**
* 得到当前日期的上月日期
* @return
*/
public static Date getLastMonth() {
   Calendar nowday = Calendar.getInstance();
   nowday.setTime(new Date());
   nowday.set(Calendar.DAY_OF_MONTH, 1);
   nowday.add(Calendar.MONTH, -1);
   return nowday.getTime();
}public static Date getLastDayByCalendar(Calendar calendar) {
   calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
   return calendar.getTime();
}/**
* 判断指定日期是否在当前N天内
* @param old
* @param days
* @return
*/
public static boolean isDaysInterval(Date old, int days) {
   Calendar now = Calendar.getInstance();
   return (now.getTimeInMillis() - old.getTime()) <= days * 24 * 3600 * 1000;
}
/**
* 根据日历获取相应月份的第一天
* @param calendar
* @return
*/
public static Date getFirstDayOfTheMonth(Calendar calendar) {
   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.getTime();
}/**
* 获取指定日期之前或者之后的日期
* @param days Day
* @return
*/
public static Date getPreviousOrNextDaysOfDate(Date date, int days) {
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(date);
   calendar.add(Calendar.DAY_OF_YEAR, days);
   return calendar.getTime();
}/**
* 获取与指定日期相差月份数的相同日期
* @param date
* @param month
* @return
*/
public static Date getPreviousOrNextMonthsOfDate(Date date, int month) {
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(date);
   calendar.add(Calendar.MONTH, month);
   return calendar.getTime();
}
/**
* 获取与指定日期相差年份数的相同日期
* @param date
* @param month
* @return
*/
public static Date getPreviousOrNextYearsOfDate(Date date, int year) {
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(date);
   calendar.add(Calendar.YEAR, year);
   return calendar.getTime();
}/**
* 得到当前日期的开始时间
* @return
*/
public static Date getBeginOfCurrentDay() {
   return getBeginOfTheDate(new Date());
}/**
* 得到当前日期的结束时间
* @return
*/
public static Date getEndOfCurrentDay() {
   return getEndOfTheDate(new Date());
}public static long getDifferenceDays(Calendar beginCalender, Calendar endCalendar) {
   long days = (endCalendar.getTimeInMillis() - beginCalender.getTimeInMillis()) / (24 * 60 * 60 * 1000);
   days = days + 1;
   return days;
}/**
* 获取当前年份的第一天
* @return
*/
public static Date getBeginOfCurrentYear() {
   Calendar calendar = Calendar.getInstance();
   calendar.set(Calendar.MONTH, 0);
   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.getTime();
}/**
* 获取当前时间 的前后N分钟
* @param date
* @param minute
* @return
*/
public static Date getPreviousOrNextMinutesOfDate(Date date, int minute) {
   Calendar now = Calendar.getInstance();
   now.setTime(date);
   now.add(Calendar.MINUTE, minute);
   return now.getTime();
}/**
* 得到指定月份的最后时刻
* @param date
* @return
*/
public static Date getLastDateOfTheMonth(Date date) {
   Calendar newday = Calendar.getInstance();
   newday.setTime(date);
   newday.set(Calendar.DAY_OF_MONTH, newday.getActualMaximum(Calendar.DAY_OF_MONTH));
   newday.set(Calendar.HOUR_OF_DAY, 23);
   newday.set(Calendar.MINUTE, 59);
   newday.set(Calendar.SECOND, 59);
   newday.set(Calendar.MILLISECOND, 999);
   return newday.getTime();
}public static Date getBeginOfTheDate(Date date) {
   Calendar nowday = Calendar.getInstance();
   nowday.setTime(date);
   nowday.set(Calendar.HOUR_OF_DAY, 0);
   nowday.set(Calendar.MINUTE, 0);
   nowday.set(Calendar.SECOND, 0);
   nowday.set(Calendar.MILLISECOND, 0);
   return nowday.getTime();
}public static Date getEndOfTheDate(Date date) {
   Calendar nowday = Calendar.getInstance();
   nowday.setTime(date);
   nowday.set(Calendar.HOUR_OF_DAY, 23);
   nowday.set(Calendar.MINUTE, 59);
   nowday.set(Calendar.SECOND, 59);
   nowday.set(Calendar.MILLISECOND, 998);//Sql Server BUG
   return nowday.getTime();
}/**
* 获取指定时间段内所有的天数集合
* @param beginDate
* @param endDate
* @return
* @throws Exception
*/
public static List<String> getAreaTime(String beginDate, String endDate) throws Exception {
   List<String> timeList = new ArrayList<String>();
   if (endDate == null || "".equals(endDate)) {
       timeList.add(beginDate);
       return timeList;
   }
   // day
   if (beginDate.length() <= 7) {
       return getAreaMonthTime(beginDate, endDate);
       // month
   } else {
       return getAreaDayTime(beginDate, endDate);
   }
}private static List<String> getAreaMonthTime(String beginMonth, String endMonth) throws Exception {
   Date parsedBeginMonth = getDateFormat(FORMAT_YYYY_MM).parse(beginMonth);
   String tempStr = "";
   List<String> timeList = new ArrayList<String>();
   int months = 0;
   while (!endMonth.equals(tempStr)) {
       tempStr = getDateFormat(FORMAT_YYYY_MM).format(getPreviousOrNextMonthsOfDate(parsedBeginMonth, months));
       timeList.add(tempStr);
       months++;
   }
   return timeList;
}/**
* 获取指定时间段内所有的天数集合
* @param beginDate
* @param endDate
* @return
* @throws Exception
*/
public static List<String> getAreaDayTime(String beginDate, String endDate) throws Exception {
   Date parsedBeginMonth = getDateFormat(FORMAT_YYYY_MM_DD).parse(beginDate);
   String tempStr = "";
   List<String> timeList = new ArrayList<String>();
   int months = 0;
   while (!endDate.equals(tempStr)) {
       tempStr = getDateFormat(FORMAT_YYYY_MM_DD).format(getPreviousOrNextDaysOfDate(parsedBeginMonth, months));
       timeList.add(tempStr);
       months++;
   }
   return timeList;
}/**
* 获取当前日期前一天的相应日期的Long形式如20160227
* @return
*/
public static Long getPreviousDay() {
   Date date = getPreviousOrNextDaysOfDate(new Date(), -1);
   return Long.valueOf((getDateFormat(FORMAT_YYYYMMDD).format(date)));
}/**
* 获取指定日期前一天的相应日期的Long形式如20160227
* @return
*/
public static Long getPreviousDay(Date date,int days) {
   Date dates = getPreviousOrNextDaysOfDate(date, days);
   return Long.valueOf((getDateFormat(FORMAT_YYYYMMDD).format(dates)));
}/**
* 获取指定日期前N月或者后N月的相同日期字符串
* @param date
* @param n
* @return
* @throws Exception
*/
public static String getPreviousOrNextMonthsOfTheMonth(String date, int n) throws Exception {
   Calendar calendar = new GregorianCalendar();
   DateFormat dateFormat = getDateFormat(FORMAT_YYYYMM);
   calendar.setTime(dateFormat.parse(date));
   calendar.add(Calendar.MONTH, n);
   return dateFormat.format(calendar.getTime());
}public static String getPreviousOrNextDaysOfTheDay(String date, int days) throws Exception {
   Calendar calendar = new GregorianCalendar();
   DateFormat dateFormat = getDateFormat(FORMAT_YYYYMMDD);
   calendar.setTime(dateFormat.parse(date));
   calendar.add(Calendar.DAY_OF_MONTH, days);
   return dateFormat.format(calendar.getTime());
}public static Long getFirstDayOfCurrentMonth() {
   Date date = getFirstDayOfThisMonth();
   String dateStr = getDateFormat(FORMAT_YYYYMMDD).format(date);
   return Long.valueOf(dateStr);
}public static Long getFirstMonthOfNow() {
   Calendar calendar = Calendar.getInstance();
   calendar.set(Calendar.DAY_OF_MONTH, 1);
   calendar.set(Calendar.MONTH, 0);
   return Long.valueOf(getDateFormat(FORMAT_YYYYMM).format(calendar.getTime()));
}public static Integer getCurrentDay() {
   Date date = new Date();
   return Integer.parseInt(getDateFormat(FORMAT_YYYYMMDD).format(date));
}public static Integer getCurrentMonth() {
   Date date = new Date();
   return Integer.parseInt(getDateFormat(FORMAT_YYYYMM).format(date));
}public static Integer getCurrentYear() {
   Date date = new Date();
   return Integer.parseInt(getDateFormat(FORMAT_YYYY).format(date));
}public static Integer getKpiDbAnyOffsetDayOfNow(int day) {
   Calendar nowday = Calendar.getInstance();
   nowday.set(Calendar.DAY_OF_YEAR, nowday.get(Calendar.DAY_OF_YEAR) + day);
   return Integer.parseInt(getDateFormat(FORMAT_YYYYMMDD).format(nowday.getTime()));
}/**
* 得到当前日期下一年的上个月
* @return
*/
public static Long getPreviousMonthOfNextYear() {
   Calendar nowday = Calendar.getInstance();
   nowday.setTime(new Date());
   nowday.set(Calendar.DAY_OF_MONTH, 1);
   nowday.add(Calendar.YEAR, +1);
   nowday.add(Calendar.MONTH, -1);
   Long time = Long.valueOf(getDateFormat(FORMAT_YYYYMM).format(nowday.getTime()));
   return time;
}/**
* 获取指定日期下个月的相同日期
* @param date
* @return
*/
public static Long getTheSameDayOfTheNextMonth(Date date) {
   Date next = getPreviousOrNextMonthsOfDate(date, 1);
   Long time = Long.valueOf(getDateFormat(FORMAT_YYYYMMDD).format(next));
   return time;
}/**
* 获取当前日期下个月的相同日期
* @param date
* @return
*/
public static Long getTheSameDayOfNextMonth() {
   return getTheSameDayOfTheNextMonth(new Date());
}public static Long getPreviousYear() {
   Calendar nowday = Calendar.getInstance();
   nowday.setTime(new Date());
   nowday.add(Calendar.YEAR, -1);
   return Long.valueOf(getDateFormat(FORMAT_YYYY).format(nowday.getTime()));
}public static List<String> getTimeListByParameter(Date paramDate, int paramter, int type) {
   if (type == USE_YEAR) {
       Date newDate = getPreviousOfNextYearOfDate(paramDate, -paramter);
       return getDaysBetweenDate(paramDate, newDate);
   } else if (type == USE_MONTH) {
       Date newDate = getPreviousOrNextMonthsOfDate(paramDate, paramter);
       return getDaysBetweenDate(paramDate, newDate);
   } else {
       return getDaysByBeginDate(paramDate, paramter);
   }
}private static Date getPreviousOfNextYearOfDate(Date date, int year) {
   Calendar now = Calendar.getInstance();
   now.setTime(date);
   now.add(Calendar.YEAR,year);
   return now.getTime();
}private static List<String> getDaysBetweenDate(Date paramDate, Date newDate) {
   DateFormat dateFormat = getDateFormat(FORMAT_YYYYMMDD);
   String formatNewDate = dateFormat.format(newDate);
   String tempStr = "";
   List<String> timeList = new ArrayList<String>();
   int days = 0;
   while (!formatNewDate.equals(tempStr)) {
       tempStr = dateFormat.format(getPreviousOrNextDaysOfDate(paramDate, -days));
       timeList.add(tempStr);
       days++;
   }
   return timeList;
}private static List<String> getDaysByBeginDate(Date paramDate, int paramter) {
   List<String> timeList = new ArrayList<String>();
   for (int i = 1; i <= paramter; i++) {
       timeList.add(getDateFormat(FORMAT_YYYYMMDD).format(getPreviousOrNextDaysOfDate(paramDate, -i)));
   }
   return timeList;
}public static Long getFirstMonthOfCurrentYear() {
   Calendar calendar = Calendar.getInstance();
   calendar.set(Calendar.MONTH,0);
   return Long.valueOf(getDateFormat(FORMAT_YYYYMM).format(calendar.getTime()));
}public static Date getPreviousOrNextMonthsOfDateTime(Date date, int months){
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(date);
   calendar.add(Calendar.MONTH, months);
   return calendar.getTime();
}/**
* 获取指定日期的前后N天的日期字符串
* @param ymd
* @param days
* @return
* @throws ParseException
*/
public static String  getPreviousOrNextDaysOfNow(String ymd,int days) throws ParseException {
   Date date = getDateFormat(FORMAT_YYYY_MM_DD).parse(ymd);
   Date result = getPreviousOrNextDaysOfDate(date, days);
   return getDateFormat(FORMAT_YYYY_MM_DD).format(result);
}public static Date getBeginOfThePreviousOrNextMonths(int month){
   Calendar calendar = Calendar.getInstance();
   calendar.add(Calendar.MONTH, month);
   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.getTime();
}public static Date getPreviousOrNextWorkDaysOfDate(Date date, int days) {
   Calendar calendar = Calendar.getInstance();
   calendar.setTime(date);
   int step = 0;
   if(days>0){
       step = 1;
   }else{
       step = -1;
   }
   for(int i = 0; i < Math.abs(days) ; ){
       calendar.add(Calendar.DAY_OF_YEAR, step);
       if(calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||calendar.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
           continue;
       }
       i++;
   }
   return calendar.getTime();
}public static Date getBeginDateOfTheMonth(Date date) {
   Calendar newday = Calendar.getInstance();
   newday.setTime(date);
   newday.set(Calendar.DAY_OF_MONTH, 1);
   newday.set(Calendar.HOUR_OF_DAY, 0);
   newday.set(Calendar.MINUTE, 0);
   newday.set(Calendar.SECOND, 0);
   newday.set(Calendar.MILLISECOND, 0);
   return newday.getTime();
}

// public static void main(String[] args) throws Exception { // System.out.println(getPreviousMonthOfNextYear()); // System.out.println(getPreviousOrNextDaysOfNow(3)); // System.out.println(getTimeListByParameter(new Date(),1,3)); // }

}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微光点亮星辰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档