JAVA時(shí)間日期處理類實(shí)例
本文實(shí)例講述了JAVA時(shí)間日期處理類,主要用來遍歷兩個(gè)日期之間的每一天。分享給大家供大家參考。具體如下:
/**
*
* 文 件 名: AccountDate.java
*
* 創(chuàng)建時(shí)間: 2008-11-18
*
* Email : **@163.com
*/
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class AccountDate {
private static transient int gregorianCutoverYear = 1582;
/** 閏年中每月天數(shù) */
private static final int[] DAYS_P_MONTH_LY= {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/** 非閏年中每月天數(shù) */
private static final int[] DAYS_P_MONTH_CY= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/** 代表數(shù)組里的年、月、日 */
private static final int Y = 0, M = 1, D = 2;
/**
* 將代表日期的字符串分割為代表年月日的整形數(shù)組
* @param date
* @return
*/
public static int[] splitYMD(String date){
date = date.replace("-", "");
int[] ymd = {0, 0, 0};
ymd[Y] = Integer.parseInt(date.substring(0, 4));
ymd[M] = Integer.parseInt(date.substring(4, 6));
ymd[D] = Integer.parseInt(date.substring(6, 8));
return ymd;
}
/**
* 檢查傳入的參數(shù)代表的年份是否為閏年
* @param year
* @return
*/
public static boolean isLeapYear(int year) {
return year >= gregorianCutoverYear ?
((year%4 == 0) && ((year%100 != 0) || (year%400 == 0))) : (year%4 == 0);
}
/**
* 日期加1天
* @param year
* @param month
* @param day
* @return
*/
private static int[] addOneDay(int year, int month, int day){
if(isLeapYear( year )){
day++;
if( day > DAYS_P_MONTH_LY[month -1 ] ){
month++;
if(month > 12){
year++;
month = 1;
}
day = 1;
}
}else{
day++;
if( day > DAYS_P_MONTH_CY[month -1 ] ){
month++;
if(month > 12){
year++;
month = 1;
}
day = 1;
}
}
int[] ymd = {year, month, day};
return ymd;
}
/**
* 將不足兩位的月份或日期補(bǔ)足為兩位
* @param decimal
* @return
*/
public static String formatMonthDay(int decimal){
DecimalFormat df = new DecimalFormat("00");
return df.format( decimal );
}
/**
* 將不足四位的年份補(bǔ)足為四位
* @param decimal
* @return
*/
public static String formatYear(int decimal){
DecimalFormat df = new DecimalFormat("0000");
return df.format( decimal );
}
/**
* 計(jì)算兩個(gè)日期之間相隔的天數(shù)
* @param begin
* @param end
* @return
* @throws ParseException
*/
public static long countDay(String begin,String end){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date beginDate , endDate;
long day = 0;
try {
beginDate= format.parse(begin);
endDate= format.parse(end);
day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}
/**
* 以循環(huán)的方式計(jì)算日期
* @param beginDate endDate
* @param days
* @return
*/
public static List<String> getEveryday(String beginDate , String endDate){
long days = countDay(beginDate, endDate);
int[] ymd = splitYMD( beginDate );
List<String> everyDays = new ArrayList<String>();
everyDays.add(beginDate);
for(int i = 0; i < days; i++){
ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);
everyDays.add(formatYear(ymd[Y])+"-"+formatMonthDay(ymd[M])+"-"+formatMonthDay(ymd[D]));
}
return everyDays;
}
public static void main(String[] args) {
List<String> list = AccountDate.getEveryday("2008-08-29", "2008-09-02");
for (String result : list) {
System.out.println(result);
}
}
}
希望本文所述對大家的java程序設(shè)計(jì)有所幫助。
相關(guān)文章
mybatis-plus中l(wèi)ambdaQuery()與lambdaUpdate()比較常見的使用方法總結(jié)
mybatis-plus是在mybatis的基礎(chǔ)上做增強(qiáng)不做改變,簡化了CRUD操作,下面這篇文章主要給大家介紹了關(guān)于mybatis-plus中l(wèi)ambdaQuery()與lambdaUpdate()比較常見的使用方法,需要的朋友可以參考下2022-09-09
Spring Boot實(shí)現(xiàn)發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Java使用組合模式實(shí)現(xiàn)表示公司組織結(jié)構(gòu)功能示例
這篇文章主要介紹了Java使用組合模式實(shí)現(xiàn)表示公司組織結(jié)構(gòu)功能,簡單描述了組合模式的概念、功能并結(jié)合實(shí)例形式分析了Java使用組合模式實(shí)現(xiàn)公司組織結(jié)構(gòu)表示功能具體操作步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-05-05
Spring+Http請求+HttpClient實(shí)現(xiàn)傳參
這篇文章主要介紹了Spring+Http請求+HttpClient實(shí)現(xiàn)傳參,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java基于ArrayList實(shí)現(xiàn)群主發(fā)紅包功能
這篇文章主要介紹了Java基于ArrayList實(shí)現(xiàn)群主發(fā)紅包功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
SpringBoot+Redis實(shí)現(xiàn)接口防刷的示例代碼
在實(shí)際開發(fā)中,會(huì)出現(xiàn)用戶多次點(diǎn)擊發(fā)送請求,本文主要介紹了SpringBoot+Redis實(shí)現(xiàn)接口防刷的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01

