Java獲取各種第一天


 前段時間自己學習的時候發現,很多時候我們需要獲取某一個日期所在周、月、年的第一天或者最后一天。為了方便以后自己用,就決定整理一下,寫一個工具類。在網上查了好多文章,最后自己總結了一下寫出下面的工具類:

package cn.eboy.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
*
* @ClassName: DateUtil
* @Description: 日期計算有關的工具類TODO
* @author ExceptionalBoy
* @date 2017年11月14日 上午10:50:04
*
*/
public class DateUtil {

/**
* 前一周的第一天
*/
public final static int FIRST_DAY_OF_PRE_WEEK = 0;

/**
* 前一周的最后一天
*/
public final static int LAST_DAY_OF_PRE_WEEK = 1;

/**
* 本周的第一天
*/
public final static int FIRST_DAY_OF_CUR_WEEK = 2;

/**
* 本周的最后一天
*/
public final static int LAST_DAY_OF_CUR_WEEK = 3;

/**
* 前一月的第一天
*/
public final static int FIRST_DAY_OF_PRE_MONTH = 4;

/**
* 前一月的最后一天
*/
public final static int LAST_DAY_OF_PRE_MONTH = 5;

/**
* 本月的第一天
*/
public final static int FIRST_DAY_OF_CUR_MONTH = 6;

/**
* 本月的最后一天
*/
public final static int LAST_DAY_OF_CUR_MONTH = 7;

/**
* 前一年的第一天
*/
public final static int FIRST_DAY_OF_PRE_YEAR = 8;

/**
* 前一年的最后一天
*/
public final static int LAST_DAY_OF_PRE_YEAR = 9;

/**
* 本年的第一天
*/
public final static int FIRST_DAY_OF_CUR_YEAR = 10;

/**
* 本年的最后一天
*/
public final static int LAST_DAY_OF_CUR_YEAR = 11;

//第一天
private static String firstDay;
//最后一天
private static String lastDay;
//日期格式化對象
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");


/**
*
* @Title: getDateByConditions
* @Description: 根據參數日期及要獲取的日期條件,獲取相應的日期TODO
* @author ExceptionalBoy
* @param @param date
* @param @param contition
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:59:44
*/
public static String getDateByConditions(Date date,int contition){
String day = null;
switch (contition) {
case 0:
day = firstDayOfPreWeek(date);
break;
case 1:
day = lastDayOfPreWeek(date);
break;
case 2:
day = firstDayOfCurWeek(date);
break;
case 3:
day = lastDayOfCurWeek(date);
break;
case 4:
day = firstDayOfPreMonth(date);
break;
case 5:
day = lastDayOfPreMonth(date);
break;
case 6:
day = firstDayOfCurMonth(date);
break;
case 7:
day = lastDayOfCurMonth(date);
break;
case 8:
day = firstDayOfPreYear(date);
break;
case 9:
day = lastDayOfPreYear(date);
break;
case 10:
day = firstDayOfCurYear(date);
break;
case 11:
day = lastDayOfCurYear(date);
break;
default:
break;
}
return day;
}

/**
*
* @Title: firstDayOfPreWeek
* @Description: 獲取參數日期前一周的第一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:54:41
*/
private static String firstDayOfPreWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE,-7);
// 判斷要計算的日期是否是周日,如果是則減一天計算周六的,否則會出問題,計算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);// 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
firstDay = dateFormat.format(cal.getTime());
return firstDay;
}

/**
*
* @Title: lastDayOfPreWeek
* @Description: 獲取參數日期前一周的最后一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:55:04
*/
private static String lastDayOfPreWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE,-7);
// 判斷要計算的日期是否是周日,如果是則減一天計算周六的,否則會出問題,計算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);// 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
cal.add(Calendar.DATE, 6);
lastDay = dateFormat.format(cal.getTime());
return lastDay;
}

/**
*
* @Title: firstDayOfCurWeek
* @Description: 獲取參數日期所在周的第一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:55:27
*/
private static String firstDayOfCurWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 判斷要計算的日期是否是周日,如果是則減一天計算周六的,否則會出問題,計算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);// 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
firstDay = dateFormat.format(cal.getTime());
return firstDay;
}

/**
*
* @Title: lastDayOfCurWeek
* @Description: 獲取參數日期所在周的最后一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:55:50
*/
private static String lastDayOfCurWeek(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 判斷要計算的日期是否是周日,如果是則減一天計算周六的,否則會出問題,計算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);// 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日歷的規則,給當前日期減去星期幾與一個星期第一天的差值
cal.add(Calendar.DATE, 6);
lastDay = dateFormat.format(cal.getTime());
return lastDay;
}

/**
*
* @Title: firstDayOfPreMonth
* @Description: 獲取參數日期前一月的第一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:56:15
*/
private static String firstDayOfPreMonth(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1);
Date theDate = calendar.getTime();
// 上個月第一天
GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
gcLast.setTime(theDate);
gcLast.set(Calendar.DAY_OF_MONTH, 1);
firstDay = dateFormat.format(gcLast.getTime());
return firstDay;
}

/**
*
* @Title: lastDayOfPreMonth
* @Description: 獲取參數日期前一月的最后一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:56:36
*/
private static String lastDayOfPreMonth(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1);
calendar.add(Calendar.MONTH, 1); // 加一個月
calendar.set(Calendar.DATE, 1); // 設置為該月第一天
calendar.add(Calendar.DATE, -1); // 再減一天即為上個月最后一天
lastDay = dateFormat.format(calendar.getTime());
return lastDay;
}

/**
*
* @Title: firstDayOfCurMonth
* @Description: 獲取參數日期所在月的第一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:57:02
*/
private static String firstDayOfCurMonth(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Date theDate = calendar.getTime();
// 上個月第一天
GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
gcLast.setTime(theDate);
gcLast.set(Calendar.DAY_OF_MONTH, 1);
firstDay = dateFormat.format(gcLast.getTime());
return firstDay;
}

/**
*
* @Title: lastDayOfCurMonth
* @Description: 獲取參數日期所在月的最后一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:57:29
*/
private static String lastDayOfCurMonth(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1); // 加一個月
calendar.set(Calendar.DATE, 1); // 設置為該月第一天
calendar.add(Calendar.DATE, -1); // 再減一天即為上個月最后一天
lastDay = dateFormat.format(calendar.getTime());
return lastDay;
}

/**
*
* @Title: firstDayOfPreYear
* @Description: 獲取參數日期前一年的第一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:58:02
*/
private static String firstDayOfPreYear(Date date){
Calendar calendar = Calendar.getInstance();
int year = date.getYear() + 1900;
calendar.clear();
calendar.set(Calendar.YEAR, year-1);
firstDay = dateFormat.format(calendar.getTime());
return firstDay;
}

/**
*
* @Title: lastDayOfPreYear
* @Description: 獲取參數日期前一年的最后一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:58:25
*/
private static String lastDayOfPreYear(Date date){
Calendar calendar = Calendar.getInstance();
int year = date.getYear() + 1900;
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.add(calendar.DATE, -1);
lastDay = dateFormat.format(calendar.getTime());
return lastDay;
}

/**
*
* @Title: firstDayOfCurYear
* @Description: 獲取參數日期所在年的第一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:58:52
*/
private static String firstDayOfCurYear(Date date){
Calendar calendar = Calendar.getInstance();
int year = date.getYear() + 1900;
calendar.clear();
calendar.set(Calendar.YEAR, year);
firstDay = dateFormat.format(calendar.getTime());
return firstDay;
}

/**
*
* @Title: lastDayOfCurYear
* @Description: 獲取參數日期所在年的最后一天TODO
* @author ExceptionalBoy
* @param @param date
* @param @return
* @return String
* @throws
* @date 2017年11月14日 上午10:59:16
*/
private static String lastDayOfCurYear(Date date){
Calendar calendar = Calendar.getInstance();
int year = date.getYear() + 1900;
calendar.clear();
calendar.set(Calendar.YEAR, year+1);
calendar.add(calendar.DATE, -1);
lastDay = dateFormat.format(calendar.getTime());
return lastDay;
}
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com