java日期方法

1.如何计算某日期所在周的起止日期:
  public static void main(String args[])
  {
       Calendar cal = Calendar.getInstance();
System.out.println("今天的日期: " + cal.getTime());

int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 2;
cal.add(Calendar.DATE, -day_of_week);
System.out.println("本周第一天: " + cal.getTime());

cal.add(Calendar.DATE, 6);
System.out.println("本周末: " + cal.getTime());
  }

2.如何计算当前时间之前的某个时间点
  Calendar cal = Calendar.getInstance();
  //当前时期往前推两天
  cal.add(Calendar.DATE,-2);
  //当前时间往前推两个小时
  cal.add(Calendar.HOUR,-2);
  //当前时间往前推两个月
  cal.add(Calendar.MONTH,-2);

3.一些常用的日期处理

/**
* This DateUtil class provides methods for formatting, validating and
* retrieving different types of dates. <BR><BR>  Note: Struts validator also
* provides a similar Date validator, one may use either one of  one's
* preference for validating the validility of the date.
*
* @author Framework Team
* @version 1.0
* @class DateUtil
* @since 12/12/2002
*/
public class DateUtil {
    /**
     * A log instance for this class
     */
    protected static Logger log = Logger.getLogger(DateUtil.class.toString());

    // Dates constants

    /**
     * "JAN" to represent January
     */
    public static final String MTH_JAN = "Jan";

    /**
     * "FEB" to represent February
     */
    public static final String MTH_FEB = "Feb";

    /**
     * "MAR" to represent March
     */
    public static final String MTH_MAR = "Mar";

    /**
     * "APR" to represent April
     */
    public static final String MTH_APR = "Apr";

    /**
     * "MAY" to represent May
     */
    public static final String MTH_MAY = "May";

    /**
     * "JUNE" to represent June
     */
    public static final String MTH_JUN = "Jun";

    /**
     * "JUL" to represent July
     */
    public static final String MTH_JUL = "Jul";

    /**
     * "AUG" to represent August
     */
    public static final String MTH_AUG = "Aug";

    /**
     * "SEP" to represent September
     */
    public static final String MTH_SEP = "Sep";

    /**
     * "OCT" to represent October
     */
    public static final String MTH_OCT = "Oct";

    /**
     * "NOV" to represent November
     */
    public static final String MTH_NOV = "Nov";

    /**
     * "DEC" to represent December
     */
    public static final String MTH_DEC = "Dec";

    /**
     * The date pattern in this format 'ddMMyyyy  HHmm'
     */
    public static String DATETIME_FORMAT = "ddMMyyyy  HHmm";

    //Add By Xi Wei on 21 Dec 2004
    public static String DATE_FORMAT = "dd MMM yyyy";
    public static String TIMESTAMP_FORMAT = "dd MMM yyyy HH:mm:ss";

    /**
     * Returns a date object from input string indicating year, month and day
     *
     * @param year  Year Indicator
     * @param month Month indicator, 1=jan 2=feb ...
     * @param day   Date indicator eg: any day from 1...31.
     * @return date java.util.Date object in millisecond.
     * @since 15/05/2000
     */
    public static Date getDate(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month - 1, day, 0, 0, 0);

        return cal.getTime();
    }

    /**
     * Compares the 2 dates: Returns true if the 2 dates are equal.
     *
     * @param date1 Date to compare
     * @param date2 Date to compare
     * @return true if <code>date1</code> equals to <code>date2</code>.
     * @since 24/04/2001
     */
    public static boolean isDateEqual(Date date1, Date date2) {
        if ((date1 == null) || (date2 == null)) {
            return false;
        }

        return resetTime(date1).compareTo(resetTime(date2)) == 0;
    }

    /**
     * Sets the default timezone to the specified timezone ID.  Note: The
     * system time will remain unchanged. Only the Time zone for the current
     * thread is set.
     *
     * @param timeZoneID The timezone ID. Example: "America/Los_Angeles", "CCT"
     *                   which stands for China/Taiwan = S'pore
     */
    public static void setDefaultTimeZone(String timeZoneID) {
        TimeZone.setDefault(TimeZone.getTimeZone(timeZoneID));
    }

    /**
     * Calculates the elapsed time between 2 dates. The elapsed time calculated
     * could either be in years, months or days
     *
     * @param type      (int) The variable type determines the calculation of the
     *                  elapsed time to be based on either years, months or days. To
     *                  compute the elapsed time in year input type set to Calendar.YEAR
     *                  To compute the elapsed time in month input type set to
     *                  Calendar.MONTH  By default the elapsed time will compute in days
     * @param startDate start date
     * @param endDate   end date
     * @return the elapsed time (int)
     */
    public static final int getElapsedTime(int type, Date startDate,
                                           Date endDate) {
        int elapsed = 0;

        if ((startDate == null) || (endDate == null)) {
            return -1;
        }

        if (startDate.after(endDate)) {
            return -1;
        }

        GregorianCalendar gc1 = (GregorianCalendar) Calendar.getInstance();
        GregorianCalendar gc2 = (GregorianCalendar) gc1.clone();
        gc1.setTime(startDate);
        gc2.setTime(endDate);

        gc1.clear(Calendar.MILLISECOND);
        gc1.clear(Calendar.SECOND);
        gc1.clear(Calendar.MINUTE);
        gc1.clear(Calendar.HOUR_OF_DAY);
        gc2.clear(Calendar.MILLISECOND);
        gc2.clear(Calendar.SECOND);
        gc2.clear(Calendar.MINUTE);
        gc2.clear(Calendar.HOUR_OF_DAY);

        if ((type != Calendar.MONTH) && (type != Calendar.YEAR)) {
            type = Calendar.DATE;
        }

        if (type == Calendar.MONTH) {
            gc1.clear(Calendar.DATE);
            gc2.clear(Calendar.DATE);
        }

        if (type == Calendar.YEAR) {
            gc1.clear(Calendar.DATE);
            gc2.clear(Calendar.DATE);
            gc1.clear(Calendar.MONTH);
            gc2.clear(Calendar.MONTH);
        }

        while (gc1.before(gc2)) {
            gc1.add(type, 1);
            elapsed++;
        }

        return elapsed;
    }

    /**
     * This method will determine if the date is the last day of the month
     *
     * @param date date
     * @return returns true if the date falls on the last day of the month else
     *         returns false
     */
    public static final boolean isEndOfTheMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

        if (cal.get(Calendar.DATE) == maxDay) {
            return true;
        }

        return false;
    }

    /**
     * This method will determine if the date is the last day of the year
     *
     * @param date date
     * @return returns true if the date falls on the last day of the year else
     *         returns false
     */
    public static final boolean isEndOfTheYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        if ((cal.get(Calendar.MONTH) == 11) && (cal.get(Calendar.DATE) == 31)) {
            return true;
        }

        return false;
    }

    /**
     * This method will return the last day of the months
     *
     * @param date date
     * @return returns the last day of the month
     */
    public static final int getLastDayOfTheMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    }

    /**
     * Returns the numeric value of the specified month
     *
     * @param month The 3 letter month representation. Example: "Jan", "Feb", etc
     * @return the numeric value of the specified month
     */
    public static int getMthInInt(String month) {
        if (month.equalsIgnoreCase(MTH_JAN)) {
            return 1;
        } else if (month.equalsIgnoreCase(MTH_FEB)) {
            return 2;
        } else if (month.equalsIgnoreCase(MTH_MAR)) {
            return 3;
        } else if (month.equalsIgnoreCase(MTH_APR)) {
            return 4;
        } else if (month.equalsIgnoreCase(MTH_MAY)) {
            return 5;
        } else if (month.equalsIgnoreCase(MTH_JUN)) {
            return 6;
        } else if (month.equalsIgnoreCase(MTH_JUL)) {
            return 7;
        } else if (month.equalsIgnoreCase(MTH_AUG)) {
            return 8;
        } else if (month.equalsIgnoreCase(MTH_SEP)) {
            return 9;
        } else if (month.equalsIgnoreCase(MTH_OCT)) {
            return 10;
        } else if (month.equalsIgnoreCase(MTH_NOV)) {
            return 11;
        } else if (month.equalsIgnoreCase(MTH_DEC)) {
            return 12;
        } else {
            return 0;
        }
    }

    /**
     * Return the date of the next working day
     *
     * @return the date of the next working day
     */
    public static Date getNextWorkingDay() {
        Date nextWorkingDay = DateUtil.addDaysToDate(DateUtil.getSystemDate(), 1);
        Calendar c = Calendar.getInstance();
        c.setTime(nextWorkingDay);

        int day = c.get(Calendar.DAY_OF_WEEK);

        if (day == Calendar.SUNDAY) {
            nextWorkingDay = DateUtil.addDaysToDate(nextWorkingDay, 1);
        }

        return nextWorkingDay;
    }

    /**
     * Compares the 2 dates: Returns true if the start date is before the end
     * date.
     *
     * @param startDate Starting date of a particular time period.
     * @param endDate   Ending date of a particular time period.
     * @return true if the <code>startDate</code> is before
     *         <code>endDate</code>.
     * @since 24/03/2001
     */
    public static boolean isStartBeforeEndDate(Date startDate, Date endDate) {
        if ((startDate == null) || (endDate == null)) {
            return false;
        }

        return resetTime(startDate).compareTo(resetTime(endDate)) < 0;
    }

    /**
     * This method will determine if the date occurs on the beginning of the
     * month
     *
     * @param date date
     * @return returns true if date is on the beginning of the month else
     *         returns false
     */
    public static final boolean isStartOfTheMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        if (cal.get(Calendar.DATE) == 1) {
            return true;
        }

        return false;
    }

    /**
     * This method will return
     * month
     *
     * @param date date
     * @return returns month in int
     */
    public static final int getMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        return cal.get(Calendar.MONTH);

    }

    public static final int getYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        return cal.get(Calendar.YEAR);

    }

    /**
     * This method will determine if the date occurs at the beginning of the
     * year
     *
     * @param date date
     * @return returns true if the date occurs on the beginning of the year
     *         else returns false
     */
    public static final boolean isStartOfTheYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        if ((cal.get(Calendar.MONTH) == 1) && (cal.get(Calendar.DATE) == 1)) {
            return true;
        }

        return false;
    }

    /**
     * Returns the corresponding 3 letter string value of the month specified by numeric month value
     *
     * @param month The numeric value of the specified month
     * @return the corresponding 3 letter string value of the month specified by numeric month value
     */
    public static String getStrMth(int month) {
        if (month == 1) {
            return MTH_JAN;
        } else if (month == 2) {
            return MTH_FEB;
        } else if (month == 3) {
            return MTH_MAR;
        } else if (month == 4) {
            return MTH_APR;
        } else if (month == 5) {
            return MTH_MAY;
        } else if (month == 6) {
            return MTH_JUN;
        } else if (month == 7) {
            return MTH_JUL;
        } else if (month == {
            return MTH_AUG;
        } else if (month == 9) {
            return MTH_SEP;
        } else if (month == 10) {
            return MTH_OCT;
        } else if (month == 11) {
            return MTH_NOV;
        } else if (month == 12) {
            return MTH_DEC;
        } else {
            return "";
        }
    }

    /**
     * Calculates the duration in years, months and days.
     *
     * @param startDate Start Date of a period.
     * @param endDate   End date of a period.
     * @return int [] result    [0]=duration in years, [1]=duration in months,
     *         [2]=duration in days.
     */
    public static final int[] computeDuration(Date startDate, Date endDate) {
        Calendar from = Calendar.getInstance();
        Calendar to = Calendar.getInstance();
        from.setTime(startDate);
        to.setTime(endDate);

        int birthYYYY = from.get(Calendar.YEAR);
        int birthMM = from.get(Calendar.MONTH);
        int birthDD = from.get(Calendar.DAY_OF_MONTH);
        int asofYYYY = to.get(Calendar.YEAR);
        int asofMM = to.get(Calendar.MONTH);
        int asofDD = to.get(Calendar.DAY_OF_MONTH);
        int ageInYears = asofYYYY - birthYYYY;
        int ageInMonths = asofMM - birthMM;
        int ageInDays = asofDD - birthDD + 1;

        if (ageInDays < 0) {
            /*
             * Guaranteed after this single treatment, ageInDays will be >= 0.
             * that is ageInDays = asofDD - birthDD + daysInBirthMM.
             */
            ageInDays += from.getActualMaximum(Calendar.DAY_OF_MONTH);
            ageInMonths--;
        }

        if (ageInDays == to.getActualMaximum(Calendar.DAY_OF_MONTH)) {
            ageInDays = 0;
            ageInMonths++;
        }

        if (ageInMonths < 0) {
            ageInMonths += 12;
            ageInYears--;
        }

        if ((birthYYYY < 0) && (asofYYYY > 0)) {
            ageInYears--;
        }

        if (ageInYears < 0) {
            ageInYears = 0;
            ageInMonths = 0;
            ageInDays = 0;
        }

        int[] result = new int[3];
        result[0] = ageInYears;
        result[1] = ageInMonths;
        result[2] = ageInDays;

        return result;
    }

    /**
     * Returns the current SQL date.
     *
     * @return Date
     */
    public static java.sql.Date getSystemDate() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        java.sql.Date sysDate = new java.sql.Date(cal.getTime().getTime());

        return sysDate;
    }

    /**
     * Returns the current timestamp.
     *
     * @return Timestamp
     */
    public static Timestamp getSystemTimestamp() {
        return new Timestamp(System.currentTimeMillis());
    }

    /**
     * Returns true if the length of the year is of 4 digits
     *
     * @param s String value Year
     * @return True   if the year length is of 4 digits, False  otherwise
     * @since 20/04/2001
     */
    public static boolean isValidYearFormat(String s) {
        if (s == null) {
            return false;
        } else if (s.trim().length() == 4) {
            return true;
        }

        return false;
    }

    /**
     * This method convert the date to string
     *
     * @param date      date
     * @param strFormat the string format
     * @return date as string format
     */
    public static String getDate(Date date, String strFormat) {
        return DateUtil.parseDate(date, strFormat);
    }

    /**
     * Returns true if the String is a valid date.
     *
     * @param strDate The date in format ddmmyyyy.
     * @return True, if it is a valid date. False, otherwise.
     */
    public static boolean isValidDate(String strDate) {
        return DateUtil.toDate(strDate, "ddMMyyyy") != null;
    }

    /**
     * Returns true if the String is a valid date by specifying the date format to be verified.
     *
     * @param strDate       The date.
     * @param dateStrFormat The date format of the specified strDate
     * @return True, if it is a valid date. False, otherwise.
     */
    public static boolean isValidDate(String strDate, String dateStrFormat) {
        return DateUtil.toDate(strDate, dateStrFormat) != null;
    }

    /**
     * Add year, month or day to a date
     * To subtract the specified number of Days to the specified Date object, juz use a negative number
     * Example: DateUtil.addDaysToDate(date, -5) ==  subtracting 5 days from the specified date.
     * The same applies to month and year.
     *
     * @param type (int).  Indicates the input num value is in year, month, or
     *             days. Valid values are Calendar.YEAR, Calendar.MONTH,
     *             Calendar.DATE
     * @param date (java.sql.Date).
     * @param num  (int).  The value to be added to the input date.
     * @return java.sql.Date.
     */
    public static final Date addDate(int type, Date date, int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        cal.add(type, num);

        return new Date(cal.getTime().getTime());
    }

    /**
     * Adds the specified number of Days to the specified Date object
     * To subtract the specified number of Days to the specified Date object, juz use a negative number
     * Example: DateUtil.addDaysToDate(date, -5) ==  subtracting 5 days from the specified date.
     *
     * @param date    Date to be add
     * @param numDays Number of days to add
     * @return date  Added Date
     */
    public static Date addDaysToDate(Date date, int numDays) {
        if (date == null) {
            return null;
        }

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.DATE, numDays);

        return c.getTime();
    }

    /**
     * Adds the specified number of Hours to the specified Date object
     * To subtract the specified number of hours to the specified Date object, juz use a negative number
     * Example: DateUtil.addDaysToDate(date, -5) ==  subtracting 5 hours from the specified date.
     *
     * @param date     Date to be add
     * @param numHours A valued byte that could possibly be of negative value.
     * @return date  Added Date
     * @since 27/10/2001
     */
    public static Date addHoursToDate(Date date, int numHours) {
        if (date == null) {
            return null;
        }

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.HOUR_OF_DAY, numHours);

        return c.getTime();
    }

    /**
     * Adds the specified number of Minutes to the specified Date object
     * To subtract the specified number of Minutes to the specified Date object, juz use a negative number
     * Example: DateUtil.addDaysToDate(date, -5) ==  subtracting 5 minutes from the specified date.
     *
     * @param date    Date to be add
     * @param numMins Number of minutes to add
     * @return date  Added Date
     * @since 27/10/2001
     */
    public static Date addMinutesToDate(Date date, int numMins) {
        if (date == null) {
            return null;
        }

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MINUTE, numMins);

        return c.getTime();
    }

    /**
     * Adds the specified number of Months to the specified Date object
     *
     * @param date      Date to be add
     * @param numMonths Number of months to add
     * @return date  Added Date
     */
    public static Date addMonthsToDate(Date date, int numMonths) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MONTH, numMonths);
        return c.getTime();
    }

    /**
     * Adds the specified number of Years to the specified Date object
     *
     * @param date     Date to be add
     * @param numYears Number of years to add
     * @return date  Added Date
     */
    public static Date addYearsToDate(Date date, int numYears) {
        if (date == null) {
            return null;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.YEAR, numYears);
        return c.getTime();
    }

    /**
     * The method will compares 2 dates (excluding the HH MM SS)
     *
     * @param date1 1st date parameter
     * @param date2 2nd date parameter
     * @return returns -1 if 1st date parameter is earlier than 2nd date
     *         parameter retuns 0 if both dates parameter is the same day
     *         retuns 1 if 1st date parameter is later than 2nd date parameter
     */
    public static int compareDates(Date date1, Date date2) {
        if ((date1 == null) && (date2 == null)) {
            return 0;
        }

        if (date1 == null) {
            return -1;
        }

        if (date2 == null) {
            return 1;
        }

        String strFormat = "yyyyMMdd";
        SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat);

        int intDate1 = Integer.parseInt(dateFormat.format(date1));
        int intDate2 = Integer.parseInt(dateFormat.format(date2));

        if (intDate1 == intDate2) {
            return 0;
        }

        if (intDate1 > intDate2) {
            return 1;
        }

        return -1;
    }

    /**
     * Parses Date object to formatted string
     *
     * @param date      date to be converted
     * @param formatStr Date/Time pattern. Example: ddMMyyyy or HHmmss or any
     *                  other patterns
     * @return String in required format  Format  : dd = Day MM = Month yyyy =
     *         Year HH = Hour mm = Minute ss = Second All format same as
     *         SimpleDateFormat. Null is returned if the date object is null.
     * @since 22/03/2001
     */
    public static String parseDate(Date date, String formatStr) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(formatStr);

        if (date == null) {
            return null;
        } else {
            return dateFormat.format(date);
        }
    }

    /**
     * Parses Date object to date-time formatted string
     *
     * @param date THe date to be converted
     * @return String in required format. Null is returned if the date object
     *         is null. (All format same as SimpleDateFormat)
     * @since 25/10/2001
     */
    public static String parseDate(Date date) {
        return parseDate(date, DATETIME_FORMAT);
    }

    /**
     * Resets time fields of date to 00:00
     *
     * @param date Date to be reset the time to zero
     * @return date  Converted Date
     */
    public static Date resetTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        return cal.getTime();
    }

    /**
     * Converts the specified date-time string to Date object based on the
     * specified date-time format. <CODE>null</CODE> is returned if the
     * specified date is invalid.
     *
     * @param strDateTime    The date string in this format 'ddMMyyyy  HHmm'.
     * @param dateTimeFormat The date pattern in this format 'ddMMyyyy  HHmm'
     * @return the Date representation.  Returns null if the date object or the
     *         strDateTime or the dateTimeFormat is null.
     */
    public static Date toDate(String strDateTime, String dateTimeFormat) {
        if ((strDateTime == null) || (strDateTime.length() == 0) ||
                (dateTimeFormat == null) || (dateTimeFormat.length() == 0)) {
            return null;
        }

        SimpleDateFormat dateFormat = new SimpleDateFormat(dateTimeFormat);
        Date date = dateFormat.parse(strDateTime, new ParsePosition(0));

        if (date == null) {
            return null;
        }

//        String dateStr = parseDate(date, dateTimeFormat);
//
//        if (!strDateTime.equals(dateStr)) {
//            return null;
//        }

        return date;
    }

    /**
     * Converts the specified date-time string to Date object based on the
     * specified date-time format. <CODE>null</CODE> is returned if the
     * specified date is invalid.
     *
     * @param strDateTime The date string in this format 'ddMMyyyy  HHmm'.
     * @return the Date representation.  Returns null if the date object or the
     *         strDateTime or the dateTimeFormat is null.
     */
    public static Date toDate(String strDateTime) {
        return toDate(strDateTime, DATETIME_FORMAT);
    }

    /**
     * Gets an integer string representation of the specified month.
     *
     * @param mthMMM Month of three letter string.  For example, "JAN",
     *               "FEB",..
     * @return a string number equivalent of the specified month string.  If
     *         the specified month is unknown, zero string is returned that is
     *         "00".
     * @since 27/03/2000
     */
    public static String toMMFormat(String mthMMM) {
        if (mthMMM.equalsIgnoreCase(MTH_JAN)) {
            return "01";
        } else if (mthMMM.equalsIgnoreCase(MTH_FEB)) {
            return "02";
        } else if (mthMMM.equalsIgnoreCase(MTH_MAR)) {
            return "03";
        } else if (mthMMM.equalsIgnoreCase(MTH_APR)) {
            return "04";
        } else if (mthMMM.equalsIgnoreCase(MTH_MAY)) {
            return "05";
        } else if (mthMMM.equalsIgnoreCase(MTH_JUN)) {
            return "06";
        } else if (mthMMM.equalsIgnoreCase(MTH_JUL)) {
            return "07";
        } else if (mthMMM.equalsIgnoreCase(MTH_AUG)) {
            return "08";
        } else if (mthMMM.equalsIgnoreCase(MTH_SEP)) {
            return "09";
        } else if (mthMMM.equalsIgnoreCase(MTH_OCT)) {
            return "10";
        } else if (mthMMM.equalsIgnoreCase(MTH_NOV)) {
            return "11";
        } else if (mthMMM.equalsIgnoreCase(MTH_DEC)) {
            return "12";
        }

        return null;
    }

    /**
     * Gets a specified month string as JAN, FEB..
     *
     * @param mthMM The month as 2 digits For example, "01", "02",..
     * @return a specified month string.  If the specified month is unknown,
     *         empty string ("") is returned.
     * @since 27/03/2000
     */
    public static String toMMMFormat(String mthMM) {
        if ("01".equals(mthMM)) {
            return MTH_JAN;
        } else if ("02".equals(mthMM)) {
            return MTH_FEB;
        } else if ("03".equals(mthMM)) {
            return MTH_MAR;
        } else if ("04".equals(mthMM)) {
            return MTH_APR;
        } else if ("05".equals(mthMM)) {
            return MTH_MAY;
        } else if ("06".equals(mthMM)) {
            return MTH_JUN;
        } else if ("07".equals(mthMM)) {
            return MTH_JUL;
        } else if ("08".equals(mthMM)) {
            return MTH_AUG;
        } else if ("09".equals(mthMM)) {
            return MTH_SEP;
        } else if ("10".equals(mthMM)) {
            return MTH_OCT;
        } else if ("11".equals(mthMM)) {
            return MTH_NOV;
        } else if ("12".equals(mthMM)) {
            return MTH_DEC;
        }

        return null;
    }

    /**
     * Converts the specified date-time string to SQL Date object based on the
     * specified date-time format. <CODE>null</CODE> is returned if the
     * specified date is invalid.
     *
     * @param strDateTime    The date string in this format 'ddMMyyyy  HHmm'.
     * @param dateTimeFormat The date pattern in this format 'ddMMyyyy  HHmm'
     * @return the SQL Date representation.  Returns null if the date object or
     *         the strDateTime or the dateTimeFormat is null.
     */
    public static java.sql.Date toSQLDate(String strDateTime,
                                          String dateTimeFormat) {
        Date date = toDate(strDateTime, dateTimeFormat);

        if (date == null) {
            return null;
        }

        return new java.sql.Date(date.getTime());
    }

    /**
     * Converts the Date object to SQL Date object.
     *
     * @param date The date to be converted.
     * @return the SQL Date representation.
     */
    public static java.sql.Date toSQLDate(Date date) {
        if (date == null) {
            return null;
        }

        return new java.sql.Date(date.getTime());
    }

    /**
     * Converts the specified date-time string to SQL Date object based on the
     * specified date-time format. <CODE>null</CODE> is returned if the
     * specified date is invalid.
     *
     * @param strDateTime The date string in this format 'ddMMyyyy  HHmm'.
     * @return the SQL Date representation.  Returns null if the date object or
     *         the strDateTime or the dateTimeFormat is null.
     */
    public static java.sql.Date toSQLDate(String strDateTime) {
        return toSQLDate(strDateTime, DATETIME_FORMAT);
    }

    /**
     * Converts the specified date-time string to Timestamp.
     *
     * @param dateTimeStr The String object in this ddMMyyyy  HHmm format
     * @return Timestamp object. Returns null if dateTimeStr is null Format
     *         used is meant for Oracle dbs only
     */
    public static Timestamp toTimestamp(String dateTimeStr) {
        return toTimestamp(toDate(dateTimeStr));
    }

    /**
     * Converts the specified date-time string to Timestamp.
     *
     * @param dateTimeStr    The String object in this ddMMyyyy  HHmm format
     * @param dateTimeFormat The date pattern in this format 'ddMMyyyy  HHmm'
     * @return Timestamp object. Returns null if dateTimeStr is null Format
     *         used is meant for Oracle dbs only
     */
    public static Timestamp toTimestamp(String dateTimeStr,
                                        String dateTimeFormat) {
        return toTimestamp(toDate(dateTimeStr, dateTimeFormat));
    }

    /**
     * Converts the specified Calendar to Timestamp.
     *
     * @param date The Date object.
     * @return Timestamp object.  Returns null if date object is null Format
     *         used is meant for Oracle dbs only
     */
    public static Timestamp toTimestamp(Date date) {
        if (date == null) {
            return null;
        }

        return new Timestamp(date.getTime());
    }

    /**
     * Converts the specified Calendar to Timestamp.
     *
     * @param timeStamp The TimeStamp object.
     * @return Date object.  Returns null if timestamp object is null Format
     *         used is meant for Oracle dbs only
     */
    public static Date toDate(Timestamp timeStamp) {
        if (timeStamp == null) {
            return null;
        }

        return new Date(timeStamp.getTime());
    }

    /**
     * get the target date(s) after(before) a specified period from a marked date
     *
     * @param originalJobDate the date to start job
     * @param months          user input to control the the period
     * @param days            user input to control the the period
     * @return expiredDate  the date that road tax has expired
     */
    public static java.util.Date[] getDurationDates(Date originalJobDate, float months, int days) {
        if (originalJobDate == null) {
            return null;
        }

        java.util.Date[] expireDates;
        Calendar markedDate = Calendar.getInstance();
        markedDate.setTime(originalJobDate);

        int iMonths = (int) months;
        int iDays = days + Math.round(30 * (months - iMonths));

        if (months < 0) {
            markedDate.add(Calendar.DATE, iDays);
            Calendar tempDate = (Calendar) markedDate.clone();
            markedDate.add(Calendar.MONTH, iMonths);

            int dayTmp = tempDate.get(Calendar.DATE);
            int maxDaysTmp = tempDate.getActualMaximum(Calendar.DATE);
            int day = markedDate.get(Calendar.DATE);
            int maxDays = markedDate.getActualMaximum(Calendar.DATE);

            if (dayTmp > day) {
                expireDates = null;
            } else if (dayTmp == maxDaysTmp && day < maxDays) {
                expireDates = new Date[maxDays - day + 1];
                for (int i = 0; i < expireDates.length; i++) {
                    expireDates[i] = markedDate.getTime();
                    markedDate.set(Calendar.DATE, ++day);
                }
            } else {
                expireDates = new Date[1];
                expireDates[0] = markedDate.getTime();
            }
        } else {
            expireDates = new Date[1];
            markedDate.add(Calendar.MONTH, iMonths);
            markedDate.add(Calendar.DATE, iDays);
            expireDates[0] = markedDate.getTime();
        }

        return expireDates;
    }


    /**
     * to determine is the date is infinite. ie is the year is 99999.
     * 9999 is used to detnote the expiry date does not expire for ever
     * Added user : smurali ext : 7943
     *
     * @param dateToCheck Date the date to check is it infinite
     * @return result      Boolean if the date is infinity it will return true. or it will return false
     */
    public static Boolean isInfinity(Date dateToCheck) {
        if (dateToCheck == null) {
            return null;
        }

        Calendar cal = Calendar.getInstance();
        cal.setTime(dateToCheck);
        int year = cal.get(Calendar.YEAR);
        log.info("The date is infinity. The given year :" + year);
        if (year >= 9999) {
            log.info("The date is infinity");
            return new Boolean(true);
        }

        log.info("The date is not infinity");
        return new Boolean(false);

    }


}
 

你可能感兴趣的:(java,oracle,sql,C++,C#)