WEB开发网
开发学院WEB开发Jsp 一些无聊的代码之一:JAVA中的日期计算 阅读

一些无聊的代码之一:JAVA中的日期计算

 2008-01-05 09:38:05 来源:WEB开发网   
核心提示:/* * DateCalculate.java , Created on 2005-3-18 * Copyright 2005 AAA Information Technology CO.LTD. All rights reserved. * * 作成日期: 2005-3-18 * 修改履历: * */packa

/* * DateCalculate.java , Created on 2005-3-18 * Copyright 2005 AAA Information Technology CO.LTD. All rights reserved. *  * 作成日期: 2005-3-18 * 修改履历:  *  */package com.bjb.xyh.util;

import java.text.DecimalFormat;//import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;

/** * 类描述:自己实现的日期计算类,可以自由扩展 * @author xieyh lamp5w@yahoo.com.cn * @version  build 2005-3-18 *  */public class DateCalculate {      /** 注重格里历和儒略历交接时的日期差别 */   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;      /** 参与运算用 */   private int[] ymd = null;

   /**   * 检查传入的参数是否合法的日期   * @param date   * @throws IllegalArgumentException   */   public static void validate(String date)throws IllegalArgumentException{          int[] ymd = splitYMD( date );          if( ymd[M] == 0 ymd[M] > 12 ){       throw new IllegalArgumentException("月份数值错误");     }          if( true == isLeapYear( ymd[0] ) ){       if( ymd[D] == 0 ymd[D] > DAYS_P_MONTH_LY[ymd[M] -1 ] ){         throw new IllegalArgumentException("日期数值错误");       }     }else{       if( ymd[D] == 0 ymd[D] > DAYS_P_MONTH_CY[ymd[M] -1 ] ){         throw new IllegalArgumentException("日期数值错误");       }     }   }

   /**   * 检查传入的参数代表的年份是否为闰年   * @param year   * @return   */   public static boolean isLeapYear(int year) {     return year >= gregorianCutoverYear ?       ((year%4 == 0) && ((year%100 != 0)            (year%400 == 0))) : // Gregorian       (year%4 == 0); // Julian   }      /**   * 日期加1天,注重这里没有考虑儒略历和格里历交接时相差的10天   * @param year   * @param month   * @param day   * @return   */   private 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 date   * @param days   * @return   */   public String addDaysByLoop(String date, int days){     validate(date);     int[] ymd = splitYMD( date );     for(int i = 0; i < days; i++){       ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);     }     return formatYear(ymd[Y])+     formatMonthDay(ymd[M])+     formatMonthDay(ymd[D]);   }      /**   * 日期减1天,注重这里没有考虑儒略历和格里历交接时相差的10天   * @param year   * @param month   * @param day   * @return   */   private int[] redUCeOneDay(int year, int month, int day){     if(isLeapYear( year )){       day--;       if( day <= 0 ){         month--;         if(month < 1){        

Tags:一些 无聊 代码

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接