Java常見日期格式及日期的計算工具類__Java

來源:互聯網
上載者:User

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));
// }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.