JAVA时间日期处理类,主要用来遍历两个日期之间的每一天
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 遍历两个时间段中间的每一天
* @author 天涯鬼域
* 2019.01.30
*/
public class AccountDate {
private static transient int gregorianCutoverYear = 1582;
/** 闰年中每月天数 */
private static final int[] DAYS_P_MONTH_LY= {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/** 非闰年中每月天数 */
private static final int[] DAYS_P_MONTH_CY= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/** 代表数组里的年、月、日 */
private static final int Y = 0, M = 1, D = 2;
/**
* 将代表日期的字符串分割为代表年月日的整形数组
* @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;
}
/**
* 检查传入的参数代表的年份是否为闰年
* @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;
}
/**
* 将不足两位的月份或日期补足为两位
* @param decimal
* @return
*/
public static String formatMonthDay(int decimal){
DecimalFormat df = new DecimalFormat("00");
return df.format( decimal );
}
/**
* 将不足四位的年份补足为四位
* @param decimal
* @return
*/
public static String formatYear(int decimal){
DecimalFormat df = new DecimalFormat("0000");
return df.format( decimal );
}
/**
* 计算两个日期之间相隔的天数
* @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;
}
/**
* 以循环的方式计算日期
* @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);
}
}
}
转载于:https://www.cnblogs.com/gxr-tygy/p/10337864.html
JAVA时间日期处理类,主要用来遍历两个日期之间的每一天相关推荐
- R语言筛选dataframe中两个日期之外的数据行,介于两个日期(包括两个日期)之间的数据行
R语言筛选dataframe中两个日期之外的数据行,介于两个日期(包括两个日期)之间的数据行 目录
- java遍历两个时间戳之间的每一天
java遍历两个时间戳之间的每一天 一度为快 时间戳 开始时间戳:1571328000 结束时间戳:1571500800 结果 关键代码 private static void getDays(lon ...
- Shell--计算两个日期的相差天数及输出这两个日期内的所有日期【工作笔记】
定义脚本 vim calculateDate.sh如下: #!/bin/sh startDate="20210801" endDate="20210826" e ...
- JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。
/** * * 文 件 名: AccountDate.java * * 创建时间: 2008-11-18 * * Email : **@163.com */import java.text.Decim ...
- Java时间处理工具类(详细)
目录 第一类: 第二类: 第一类: package com.chinamcloud.spiderMember.util;import org.apache.commons.lang3.StringUt ...
- 非常强大的java时间处理工具类!
xk-time 是时间转换,时间计算,时间格式化,时间解析,日历,时间cron表达式和时间NLP等的工具,使用Java8,线程安全,简单易用,多达70几种常用日期格式化模板,支持Java8时间类和Da ...
- 正方形类的定义,比较两个日期的大小并计算其间隔天数
实验项目5:常用实用类 一.实验目的和要求 学会覆盖Object类中常用方法: 学会使用Math类中常用方法: 学会字符串的常用操作: 学会常用日期类的使用方法. 二.实验内容与步骤 1.定义一个名为 ...
- java 计算两个日期相差月数_Java简单计算两个日期月数差的方法
本文实例讲述了Java简单计算两个日期月数差的方法.分享给大家供大家参考,具体如下: /** * 获取两个日期相差的月数 * @param d1 较大的日期 * @param d2 较小的日期 * @ ...
- java 日期只计算年月日大小_Java 计算两个日期相差多少年月日
JDK7及以前的版本,计算两个日期相差的年月日比较麻烦. JDK8新出的日期类,提供了比较简单的实现方法. /*** 计算2个日期之间相差的 相差多少年月日 * 比如:2011-02-02 到 201 ...
最新文章
- 最新单步目标检测框架,引入双向网络,精度和速度均达到不错效果
- 计算机辅助药物合成投什么期刊,中国药物化学杂志审稿快吗
- Spring.Net 能为我们做点什么
- 全国计算机一级考试的练题软件,2017全国计算机一级考试WPS备考练习题
- mysql 优化语句
- 文件系统的简单的操作
- [转]C#正则表达式小结
- vba mysql 80004005_Access运行时错误'-2147467259(80004005)':方法'Controls'作用于对象'CommandBarPopup'时失败的解决方法...
- 联想 K5 Pro(L38041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.188
- 学习廖雪峰的Python教程之Python基础
- exagear安装java_exagear模拟器怎么使用 exagear模拟器使用方法安装教程
- 海南大学信号与系统838报考高频问题整理(4)
- 基于HTML和CSS完成京东页面的制作
- Accumulation
- 如何取消excel密码_Excel表格技巧—Excel表格如何取消密码
- 数据库云管平台 zCloud v3.5发布,智能化和国产数据库支持能力再增强
- 北京2008中国代表团名单
- stata最大值最小值命令_听说会Stata的人,数学不会太差?
- 推荐一个Arduino学习模拟器: 123D Circuites
- 游戏修改器DIY(一)
热门文章
- 2017华为软件精英挑战赛小结
- 史上最全的FTP网址
- 极智AI | 一文看懂昇腾达芬奇架构计算单元
- SpringCloud系列之六
- 数加平台——阿里大数据OS实践
- 计算机串行总线控制器,通用串行总线控制器出现叹号是什么情况?怎么解决?...
- 怎么保存网页为html格式,怎样保存网页部分内容为html格式?
- altera fpga大小如何衡量_Xilinx和Altera FPGA的基本逻辑单元对比
- Java--反射(框架设计的灵魂)
- Coursera | Applied Plotting, Charting Data Representation in Python(UMich)| Assignment4