因領導懶惰,頁面查詢條件中的日期項懶得手工輸入,查詢條件變作上月,上季,上週,故討教多方,寫了一個工具類,以作日後參考.
package util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateTool {
public static long ONE_DAYS_TIME = 24*60*60*1000;//1天的毫秒數
public static long TWO_DAYS_TIME = 2*24*60*60*1000;//2天的毫秒數
public static long THREE_DAYS_TIME = 3*24*60*60*1000;//3天的毫秒數
public static long FOUR_DAYS_TIME = 4*24*60*60*1000;//4天的毫秒數
public static long FIVE_DAYS_TIME = 5*24*60*60*1000;//5天的毫秒數
public static long SIX_DAYS_TIME = 6*24*60*60*1000;//6天的毫秒數
public static long SEVEN_DAYS_TIME = 7*24*60*60*1000;//7天的毫秒數
public static long EIGHT_DAYS_TIME = 8*24*60*60*1000;//8天的毫秒數
public static long NINE_DAYS_TIME = 9*24*60*60*1000;//9天的毫秒數
public static long TEN_DAYS_TIME = 10*24*60*60*1000;//10天的毫秒數
public static long ELEVEN_DAYS_TIME = 11*24*60*60*1000;//11天的毫秒數
public static long TWELVE_DAYS_TIME = 12*24*60*60*1000;//12天的毫秒數
public static long THIRTEEN_DAYS_TIME = 13*24*60*60*1000;//13天的毫秒數
/ **
* 得到某個日期上一年的年份
* @param dateString 格式yyyyMMdd
* @return 4位年份值
*/
public static String getLastYear(String dateString){
String currentYear = dateString.substring(0, 4);//該日期的所在年份
return String.valueOf(Integer.parseInt(currentYear)-1);
}
/ **
* 得到某個日期上月的月份
* @param dateString 格式yyyyMMdd
* @return 2位月份值 1月份返回12
*/
public static String getLastMonth(String dateString){
String currentMonth = dateString.substring(4, 6);//改日期所在月份
if("01".equals(currentMonth)){
currentMonth = "12";
}else if(Integer.parseInt(currentMonth)>10){
currentMonth = String.valueOf(Integer.parseInt(currentMonth)-1);
}else{
currentMonth = "0"+String.valueOf(Integer.parseInt(currentMonth)-1);
}
return currentMonth;
}
/ **
* 得到某一日期的上個月的開始日期
* @param dateString 格式yyyyMMdd
* @return 8位日期值
*/
public static String getBeginningDateOfLastMonth(String dateString) {
String lastYear = getLastYear(dateString);//該日期上年年份
String lastMonth = getLastMonth(dateString);//改日期上月月份
if("12".equals(lastMonth)){
return lastYear+lastMonth+"01";
}else{
return dateString.substring(0,4)+lastMonth+"01";
}
}
/ **
* 得到某個日期上月月份的結束日期
* @param dateString 格式yyyyMMdd
* @return 8位日期值
*/
public static String getEndingDateOfLastMonth(String dateString){
String lastYear_month = getBeginningDateOfLastMonth(dateString).substring(0, 6);//該月份上月月份的年+月
String lastYear = lastYear_month.substring(0,4);//該日期上年年份
String lastMonth = lastYear_month.substring(4,6);//該日期上月月份
String date = null;
switch (Integer.parseInt(lastMonth)) {
case 2:
int intValueOfYear = Integer.parseInt(lastYear);
if((intValueOfYear%4==0)||(intValueOfYear%100!=0&&intValueOfYear%400==0)){
date = lastYear_month+"29";//閏年2月29天
}else{
date = lastYear_month+"28";//非閏年2月28天
}
break;
case 4:
case 6:
case 9:
case 11:
date = lastYear_month+"30";//4,6,9,11月30天
break;
default:
date = lastYear_month+"31";//1,3,5,7,8,10,12月31天
break;
}
return date;
}
/ **
* 得到某個日期上一季度的起始月份
* @param dateString
* @return 2位月份值
*/
public static String getBeginningMonthOfLastSeason(String dateString){
String currentMonth = dateString.substring(4, 6);//當前月份
String monthOfLastSeason = null;//上一季度起始月份
switch(Integer.parseInt(currentMonth)){
case 1:
case 2:
case 3:
monthOfLastSeason = "10";
break;
case 4:
case 5:
case 6:
monthOfLastSeason = "01";
break;
case 7:
case 8:
case 9:
monthOfLastSeason = "04";
break;
default:
monthOfLastSeason = "07";
break;
}
return monthOfLastSeason;
}
/ **
* 得到某個日期上一季度的結束月份
* @param dateString
* @return 2位月份值
*/
public static String getEndingMonthOfLastSeason(String dateString){
String currentMonth = dateString.substring(4, 6);//當前月份
String monthOfLastSeason = null;//上一季度結束月份
switch(Integer.parseInt(currentMonth)){
case 1:
case 2:
case 3:
monthOfLastSeason = "12";
break;
case 4:
case 5:
case 6:
monthOfLastSeason = "03";
break;
case 7:
case 8:
case 9:
monthOfLastSeason = "06";
break;
default:
monthOfLastSeason = "09";
break;
}
return monthOfLastSeason;
}
/ **
* 得到某個日期上一季度的開始日期
* @param dateString
* @return 8位日期
*/
public static String getBeginingDateOfLastSeason(String dateString){
String currentYear = dateString.substring(0, 4);//該日期所在年份
String lastYear = getLastYear(dateString);//該日期上一年年份
String currentMonth = dateString.substring(4, 6);//該日期所在月份
String beginningMonthOfLastSeason = getBeginningMonthOfLastSeason(dateString);//該日期上一季度起始月份
String date = null;
if("01".equals(currentMonth)||"02".equals(currentMonth)||"03".equals(currentMonth)){
date = lastYear+beginningMonthOfLastSeason+"01";
}else{
date = currentYear+beginningMonthOfLastSeason+"01";
}
return date;
}
/ **
* 得到某個日期上一季度的結束日期
* @param dateString
* @return 8位日期
*/
public static String getEndingDateOfLastSeason(String dateString){
String currentYear = dateString.substring(0, 4);//該日期所在年份
String lastYear = getLastYear(dateString);//該日期上一年年份
String currentMonth = dateString.substring(4, 6);//該日期所在月份
String endingMonthOfLastSeason = getEndingMonthOfLastSeason(dateString);//該日期上季度結束月份
String date = null;
if("01".equals(currentMonth)||"02".equals(currentMonth)||"03".equals(currentMonth)){
switch (Integer.parseInt(endingMonthOfLastSeason)) {
case 2:
int intValueOfYear = Integer.parseInt(lastYear);
if((intValueOfYear%4==0)||(intValueOfYear%100!=0&&intValueOfYear%400==0)){
date = lastYear+endingMonthOfLastSeason+"29";//閏年2月29天
}else{
date = lastYear+endingMonthOfLastSeason+"28";//非閏年2月28天
}
break;
case 4:
case 6:
case 9:
case 11:
date = lastYear+endingMonthOfLastSeason+"30";//4,6,9,11月30天
break;
default:
date = lastYear+endingMonthOfLastSeason+"31";//1,3,5,7,8,10,12月31天
break;
}
}else{
switch (Integer.parseInt(endingMonthOfLastSeason)) {
case 2:
int intValueOfYear = Integer.parseInt(currentYear);
if((intValueOfYear%4==0)||(intValueOfYear%100!=0&&intValueOfYear%400==0)){
date = currentYear+endingMonthOfLastSeason+"29";//閏年2月29天
}else{
date = currentYear+endingMonthOfLastSeason+"28";//非閏年2月28天
}
break;
case 4:
case 6:
case 9:
case 11:
date = currentYear+endingMonthOfLastSeason+"30";//4,6,9,11月30天
break;
default:
date = currentYear+endingMonthOfLastSeason+"31";//1,3,5,7,8,10,12月31天
break;
}
}
return date;
}
/ **
* 得到某個日期上一週的起始日期(大致思路:獲得該日期的星期信息,和距離1970.1.1的毫秒數,如爲週一,將此毫秒數向前減7天的毫秒數,週二-週日依次類推)
* @param dateString
* @return 8位日期
* @throws ParseException
*/
public static String getBeginningDateOfLastWeek(String dateString) throws ParseException{
DateFormat dateFormater = new SimpleDateFormat("yyyyMMdd");
Date dateObject = dateFormater.parse(dateString);//將日期字符串轉換爲日期對象
Calendar calendar = new GregorianCalendar();
calendar.setTime(dateObject);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//該日期的星期
long time = dateObject.getTime();
switch (dayOfWeek) {
case 2:
dateObject.setTime(time-DateTool.SEVEN_DAYS_TIME);//週一,美國和歐洲習慣把週日當作每週的第一天,故週一爲2
break;
case 3:
dateObject.setTime(time-DateTool.EIGHT_DAYS_TIME);
break;
case 4:
dateObject.setTime(time-DateTool.NINE_DAYS_TIME);
break;
case 5:
dateObject.setTime(time-DateTool.TEN_DAYS_TIME);
break;
case 6:
dateObject.setTime(time-DateTool.ELEVEN_DAYS_TIME);
break;
case 7:
dateObject.setTime(time-DateTool.TWELVE_DAYS_TIME);
break;
default:
dateObject.setTime(time-DateTool.THIRTEEN_DAYS_TIME);
break;
}
String date = dateFormater.format(dateObject);
return date;
}
/ **
* 得到某個日期上一週的結束日期
* @param dateString
* @return 8位日期
* @throws ParseException
*/
public static String getEndingDateOfLastWeek(String dateString) throws ParseException{
DateFormat dateFormater = new SimpleDateFormat("yyyyMMdd");
Date dateObject = dateFormater.parse(dateString);//將日期字符串轉換爲日期對象
Calendar calendar = new GregorianCalendar();
calendar.setTime(dateObject);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//該日期的星期
long time = dateObject.getTime();
switch (dayOfWeek) {
case 2:
dateObject.setTime(time-DateTool.ONE_DAYS_TIME);//週一,美國和歐洲習慣把週日當作每週的第一天,故週一爲2
break;
case 3:
dateObject.setTime(time-DateTool.TWO_DAYS_TIME);
break;
case 4:
dateObject.setTime(time-DateTool.THREE_DAYS_TIME);
break;
case 5:
dateObject.setTime(time-DateTool.FOUR_DAYS_TIME);
break;
case 6:
dateObject.setTime(time-DateTool.FIVE_DAYS_TIME);
break;
case 7:
dateObject.setTime(time-DateTool.SIX_DAYS_TIME);
break;
default:
dateObject.setTime(time-DateTool.SEVEN_DAYS_TIME);
break;
}
String date = dateFormater.format(dateObject);
return date;
}
}
根據某個日期獲得其上月,上季,上週的起止日期
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.