JAVA时间日期处理类实例

 更新时间:2015年04月21日 12:03:50   作者:MagicYK  
这篇文章主要介绍了JAVA时间日期处理类,可实现遍历两个日期之间的每一天的功能,涉及针对日期的常见操作技巧,需要的朋友可以参考下

本文实例讲述了JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。分享给大家供大家参考。具体如下:

/**
* 
* 文 件 名: AccountDate.java
* 
* 创建时间: 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;
 /** 闰年中每月天数 */
 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);
  }
 }
}

希望本文所述对大家的java程序设计有所帮助。

相关文章

  • Spring MVC实现GET请求接收Date类型参数

    Spring MVC实现GET请求接收Date类型参数

    这篇文章主要介绍了Spring MVC实现GET请求接收Date类型参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 在controller中如何设置接收参数的默认值

    在controller中如何设置接收参数的默认值

    这篇文章主要介绍了在controller中如何设置接收参数的默认值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring动态多数据源配置实例Demo

    Spring动态多数据源配置实例Demo

    本篇文章主要介绍了Spring动态多数据源配置实例Demo,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Java获取resources下文件路径的几种方法及遇到的问题

    Java获取resources下文件路径的几种方法及遇到的问题

    这篇文章主要给大家介绍了关于Java获取resources下文件路径的几种方法及遇到的问题,在Java开发中经常需要读取项目中resources目录下的文件或获取资源路径,需要的朋友可以参考下
    2023-12-12
  • springmvc中进行数据保存以及日期参数的保存过程解析

    springmvc中进行数据保存以及日期参数的保存过程解析

    这篇文章主要介绍了springmvc中进行数据保存以及日期参数的保存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring中HandlerMapping接口源码详解

    Spring中HandlerMapping接口源码详解

    这篇文章主要介绍了Spring中HandlerMapping接口源码详解,RequestMappingHandlerMapping类就是实现此接口并将容器中所有的控制器的RequestMappingInfo请求和HandlerMethod注册到内存之中,需要的朋友可以参考下
    2023-11-11
  • Spring 父类变量注入失败的解决

    Spring 父类变量注入失败的解决

    这篇文章主要介绍了Spring 父类变量注入失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • JVM内存分配及String常用方法解析

    JVM内存分配及String常用方法解析

    这篇文章主要介绍了JVM内存分配及String常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 详解如何在Java中实现堆排序算法

    详解如何在Java中实现堆排序算法

    这篇文章主要为大家详细介绍了如何利用Java实现堆排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java仿Windows记事本源代码分享

    Java仿Windows记事本源代码分享

    这篇文章主要为大家详细介绍了Java仿Windows记事本源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03

最新评论