http://www.graphics.net.cn/document/java/011/129.asp
- /*
- * <p>Company: 凌科軟件 www.elinksoft.com </p>
- * @author liubaojun
- * @version 1.0
- * Created on 2004-11-29
- * 來源於 elinkBSP (業務架構平臺) 部分源代碼
- */
- import java.text.*;
- import java.util.*;
- public class DateUtil
- {
- private static final int[] dayArray = new int[]
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- private static SimpleDateFormat sdf = new SimpleDateFormat();
- public static synchronized Calendar getCalendar()
- {
- return GregorianCalendar.getInstance();
- }
- /**
- @return String
- */
- public static synchronized String getDateMilliFormat()
- {
- Calendar cal = Calendar.getInstance();
- return getDateMilliFormat( cal );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateMilliFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss,SSS";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateMilliFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss,SSS";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarMilliFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss,SSS";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateMilliFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss,SSS";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @return String
- */
- public static synchronized String getDateSecondFormat()
- {
- Calendar cal = Calendar.getInstance();
- return getDateSecondFormat( cal );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateSecondFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateSecondFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarSecondFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateSecondFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @return String
- */
- public static synchronized String getDateMinuteFormat()
- {
- Calendar cal = Calendar.getInstance();
- return getDateMinuteFormat( cal );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateMinuteFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd HH:mm";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateMinuteFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd HH:mm";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarMinuteFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateMinuteFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @return String
- */
- public static synchronized String getDateDayFormat()
- {
- Calendar cal = Calendar.getInstance();
- return getDateDayFormat( cal );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateDayFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateDayFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarDayFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateDayFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @return String
- */
- public static synchronized String getDateFileFormat()
- {
- Calendar cal = Calendar.getInstance();
- return getDateFileFormat( cal );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateFileFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd_HH-mm-ss";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateFileFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd_HH-mm-ss";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarFileFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd_HH-mm-ss";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateFileFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd_HH-mm-ss";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @return String
- */
- public static synchronized String getDateW3CFormat()
- {
- Calendar cal = Calendar.getInstance();
- return getDateW3CFormat( cal );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateW3CFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateW3CFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarW3CFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateW3CFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @param cal
- @return String
- */
- public static synchronized String getDateFormat( java.util.Calendar cal )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return getDateFormat( cal, pattern );
- }
- /**
- @param date
- @return String
- */
- public static synchronized String getDateFormat( java.util.Date date )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return getDateFormat( date, pattern );
- }
- /**
- @param strDate
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return parseCalendarFormat( strDate, pattern );
- }
- /**
- @param strDate
- @return java.util.Date
- */
- public static synchronized Date parseDateFormat( String strDate )
- {
- String pattern = "yyyy-MM-dd HH:mm:ss";
- return parseDateFormat( strDate, pattern );
- }
- /**
- @param cal
- @param pattern
- @return String
- */
- public static synchronized String getDateFormat( java.util.Calendar cal, String pattern )
- {
- return getDateFormat( cal.getTime(), pattern );
- }
- /**
- @param date
- @param pattern
- @return String
- */
- public static synchronized String getDateFormat( java.util.Date date, String pattern )
- {
- synchronized ( sdf )
- {
- String str = null;
- sdf.applyPattern( pattern );
- str = sdf.format( date );
- return str;
- }
- }
- /**
- @param strDate
- @param pattern
- @return java.util.Calendar
- */
- public static synchronized Calendar parseCalendarFormat( String strDate, String pattern )
- {
- synchronized ( sdf )
- {
- Calendar cal = null;
- sdf.applyPattern( pattern );
- try
- {
- sdf.parse( strDate );
- cal = sdf.getCalendar();
- }
- catch ( Exception e )
- {
- }
- return cal;
- }
- }
- /**
- @param strDate
- @param pattern
- @return java.util.Date
- */
- public static synchronized Date parseDateFormat( String strDate, String pattern )
- {
- synchronized ( sdf )
- {
- Date date = null;
- sdf.applyPattern( pattern );
- try
- {
- date = sdf.parse( strDate );
- }
- catch ( Exception e )
- {
- }
- return date;
- }
- }
- public static synchronized int getLastDayOfMonth( int month )
- {
- if ( month < 1 || month > 12 )
- {
- return -1;
- }
- int retn = 0;
- if ( month == 2 )
- {
- if ( isLeapYear() )
- {
- retn = 29;
- }
- else
- {
- retn = dayArray[month - 1];
- }
- }
- else
- {
- retn = dayArray[month - 1];
- }
- return retn;
- }
- public static synchronized int getLastDayOfMonth( int year, int month )
- {
- if ( month < 1 || month > 12 )
- {
- return -1;
- }
- int retn = 0;
- if ( month == 2 )
- {
- if ( isLeapYear( year ) )
- {
- retn = 29;
- }
- else
- {
- retn = dayArray[month - 1];
- }
- }
- else
- {
- retn = dayArray[month - 1];
- }
- return retn;
- }
- public static synchronized boolean isLeapYear()
- {
- Calendar cal = Calendar.getInstance();
- int year = cal.get( Calendar.YEAR );
- return isLeapYear( year );
- }
- public static synchronized boolean isLeapYear( int year )
- {
- /**
- * 詳細設計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
- * 3.能被4整除同時能被100整除則不是閏年
- */
- if ( ( year % 400 ) == 0 )
- return true;
- else if ( ( year % 4 ) == 0 )
- {
- if ( ( year % 100 ) == 0 )
- return false;
- else return true;
- }
- else return false;
- }
- /**
- * 判斷指定日期的年份是否是閏年
- *
- * @param date
- * 指定日期。
- * @return 是否閏年
- */
- public static synchronized boolean isLeapYear( java.util.Date date )
- {
- /**
- * 詳細設計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
- * 3.能被4整除同時能被100整除則不是閏年
- */
- // int year = date.getYear();
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- int year = gc.get( Calendar.YEAR );
- return isLeapYear( year );
- }
- public static synchronized boolean isLeapYear( java.util.Calendar gc )
- {
- /**
- * 詳細設計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
- * 3.能被4整除同時能被100整除則不是閏年
- */
- int year = gc.get( Calendar.YEAR );
- return isLeapYear( year );
- }
- /**
- * 得到指定日期的前一個工作日
- *
- * @param date
- * 指定日期。
- * @return 指定日期的前一個工作日
- */
- public static synchronized java.util.Date getPreviousWeekDay(
- java.util.Date date )
- {
- {
- /**
- * 詳細設計:
- * 1.如果date是星期日,則減3天
- * 2.如果date是星期六,則減2天
- * 3.否則減1天
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- return getPreviousWeekDay( gc );
- // switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- // {
- // case ( Calendar.MONDAY ):
- // gc.add( Calendar.DATE, -3 );
- // break;
- // case ( Calendar.SUNDAY ):
- // gc.add( Calendar.DATE, -2 );
- // break;
- // default:
- // gc.add( Calendar.DATE, -1 );
- // break;
- // }
- // return gc.getTime();
- }
- }
- public static synchronized java.util.Date getPreviousWeekDay(
- java.util.Calendar gc )
- {
- {
- /**
- * 詳細設計:
- * 1.如果date是星期日,則減3天
- * 2.如果date是星期六,則減2天
- * 3.否則減1天
- */
- switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- {
- case ( Calendar.MONDAY ):
- gc.add( Calendar.DATE, -3 );
- break;
- case ( Calendar.SUNDAY ):
- gc.add( Calendar.DATE, -2 );
- break;
- default:
- gc.add( Calendar.DATE, -1 );
- break;
- }
- return gc.getTime();
- }
- }
- /**
- * 得到指定日期的後一個工作日
- *
- * @param date
- * 指定日期。
- * @return 指定日期的後一個工作日
- */
- public static synchronized java.util.Date getNextWeekDay(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.如果date是星期五,則加3天
- * 2.如果date是星期六,則加2天
- * 3.否則加1天
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- {
- case ( Calendar.FRIDAY ):
- gc.add( Calendar.DATE, 3 );
- break;
- case ( Calendar.SATURDAY ):
- gc.add( Calendar.DATE, 2 );
- break;
- default:
- gc.add( Calendar.DATE, 1 );
- break;
- }
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getNextWeekDay(
- java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.如果date是星期五,則加3天
- * 2.如果date是星期六,則加2天
- * 3.否則加1天
- */
- switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- {
- case ( Calendar.FRIDAY ):
- gc.add( Calendar.DATE, 3 );
- break;
- case ( Calendar.SATURDAY ):
- gc.add( Calendar.DATE, 2 );
- break;
- default:
- gc.add( Calendar.DATE, 1 );
- break;
- }
- return gc;
- }
- /**
- * 取得指定日期的下一個月的最後一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一個月的最後一天
- */
- public static synchronized java.util.Date getLastDayOfNextMonth(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.調用getNextMonth設置當前時間
- * 2.以1爲基礎,調用getLastDayOfMonth
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.setTime( DateUtil.getNextMonth( gc.getTime() ) );
- gc.setTime( DateUtil.getLastDayOfMonth( gc.getTime() ) );
- return gc.getTime();
- }
- /**
- * 取得指定日期的下一個星期的最後一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一個星期的最後一天
- */
- public static synchronized java.util.Date getLastDayOfNextWeek(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.調用getNextWeek設置當前時間
- * 2.以1爲基礎,調用getLastDayOfWeek
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.setTime( DateUtil.getNextWeek( gc.getTime() ) );
- gc.setTime( DateUtil.getLastDayOfWeek( gc.getTime() ) );
- return gc.getTime();
- }
- /**
- * 取得指定日期的下一個月的第一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一個月的第一天
- */
- public static synchronized java.util.Date getFirstDayOfNextMonth(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.調用getNextMonth設置當前時間
- * 2.以1爲基礎,調用getFirstDayOfMonth
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.setTime( DateUtil.getNextMonth( gc.getTime() ) );
- gc.setTime( DateUtil.getFirstDayOfMonth( gc.getTime() ) );
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getFirstDayOfNextMonth(
- java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.調用getNextMonth設置當前時間
- * 2.以1爲基礎,調用getFirstDayOfMonth
- */
- gc.setTime( DateUtil.getNextMonth( gc.getTime() ) );
- gc.setTime( DateUtil.getFirstDayOfMonth( gc.getTime() ) );
- return gc;
- }
- /**
- * 取得指定日期的下一個星期的第一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一個星期的第一天
- */
- public static synchronized java.util.Date getFirstDayOfNextWeek(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.調用getNextWeek設置當前時間
- * 2.以1爲基礎,調用getFirstDayOfWeek
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.setTime( DateUtil.getNextWeek( gc.getTime() ) );
- gc.setTime( DateUtil.getFirstDayOfWeek( gc.getTime() ) );
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getFirstDayOfNextWeek(
- java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.調用getNextWeek設置當前時間
- * 2.以1爲基礎,調用getFirstDayOfWeek
- */
- gc.setTime( DateUtil.getNextWeek( gc.getTime() ) );
- gc.setTime( DateUtil.getFirstDayOfWeek( gc.getTime() ) );
- return gc;
- }
- /**
- * 取得指定日期的下一個月
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一個月
- */
- public static synchronized java.util.Date getNextMonth( java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.指定日期的月份加1
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.add( Calendar.MONTH, 1 );
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getNextMonth( java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.指定日期的月份加1
- */
- gc.add( Calendar.MONTH, 1 );
- return gc;
- }
- /**
- * 取得指定日期的下一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一天
- */
- public static synchronized java.util.Date getNextDay( java.util.Date date )
- {
- /**
- * 詳細設計: 1.指定日期加1天
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.add( Calendar.DATE, 1 );
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getNextDay( java.util.Calendar gc )
- {
- /**
- * 詳細設計: 1.指定日期加1天
- */
- gc.add( Calendar.DATE, 1 );
- return gc;
- }
- /**
- * 取得指定日期的下一個星期
- *
- * @param date
- * 指定日期。
- * @return 指定日期的下一個星期
- */
- public static synchronized java.util.Date getNextWeek( java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.指定日期加7天
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.add( Calendar.DATE, 7 );
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getNextWeek( java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.指定日期加7天
- */
- gc.add( Calendar.DATE, 7 );
- return gc;
- }
- /**
- * 取得指定日期的所處星期的最後一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的所處星期的最後一天
- */
- public static synchronized java.util.Date getLastDayOfWeek(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.如果date是星期日,則加6天
- * 2.如果date是星期一,則加5天
- * 3.如果date是星期二,則加4天
- * 4.如果date是星期三,則加3天
- * 5.如果date是星期四,則加2天
- * 6.如果date是星期五,則加1天
- * 7.如果date是星期六,則加0天
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- {
- case ( Calendar.SUNDAY ):
- gc.add( Calendar.DATE, 6 );
- break;
- case ( Calendar.MONDAY ):
- gc.add( Calendar.DATE, 5 );
- break;
- case ( Calendar.TUESDAY ):
- gc.add( Calendar.DATE, 4 );
- break;
- case ( Calendar.WEDNESDAY ):
- gc.add( Calendar.DATE, 3 );
- break;
- case ( Calendar.THURSDAY ):
- gc.add( Calendar.DATE, 2 );
- break;
- case ( Calendar.FRIDAY ):
- gc.add( Calendar.DATE, 1 );
- break;
- case ( Calendar.SATURDAY ):
- gc.add( Calendar.DATE, 0 );
- break;
- }
- return gc.getTime();
- }
- /**
- * 取得指定日期的所處星期的第一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的所處星期的第一天
- */
- public static synchronized java.util.Date getFirstDayOfWeek(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.如果date是星期日,則減0天
- * 2.如果date是星期一,則減1天
- * 3.如果date是星期二,則減2天
- * 4.如果date是星期三,則減3天
- * 5.如果date是星期四,則減4天
- * 6.如果date是星期五,則減5天
- * 7.如果date是星期六,則減6天
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- {
- case ( Calendar.SUNDAY ):
- gc.add( Calendar.DATE, 0 );
- break;
- case ( Calendar.MONDAY ):
- gc.add( Calendar.DATE, -1 );
- break;
- case ( Calendar.TUESDAY ):
- gc.add( Calendar.DATE, -2 );
- break;
- case ( Calendar.WEDNESDAY ):
- gc.add( Calendar.DATE, -3 );
- break;
- case ( Calendar.THURSDAY ):
- gc.add( Calendar.DATE, -4 );
- break;
- case ( Calendar.FRIDAY ):
- gc.add( Calendar.DATE, -5 );
- break;
- case ( Calendar.SATURDAY ):
- gc.add( Calendar.DATE, -6 );
- break;
- }
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getFirstDayOfWeek(
- java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.如果date是星期日,則減0天
- * 2.如果date是星期一,則減1天
- * 3.如果date是星期二,則減2天
- * 4.如果date是星期三,則減3天
- * 5.如果date是星期四,則減4天
- * 6.如果date是星期五,則減5天
- * 7.如果date是星期六,則減6天
- */
- switch ( gc.get( Calendar.DAY_OF_WEEK ) )
- {
- case ( Calendar.SUNDAY ):
- gc.add( Calendar.DATE, 0 );
- break;
- case ( Calendar.MONDAY ):
- gc.add( Calendar.DATE, -1 );
- break;
- case ( Calendar.TUESDAY ):
- gc.add( Calendar.DATE, -2 );
- break;
- case ( Calendar.WEDNESDAY ):
- gc.add( Calendar.DATE, -3 );
- break;
- case ( Calendar.THURSDAY ):
- gc.add( Calendar.DATE, -4 );
- break;
- case ( Calendar.FRIDAY ):
- gc.add( Calendar.DATE, -5 );
- break;
- case ( Calendar.SATURDAY ):
- gc.add( Calendar.DATE, -6 );
- break;
- }
- return gc;
- }
- /**
- * 取得指定日期的所處月份的最後一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的所處月份的最後一天
- */
- public static synchronized java.util.Date getLastDayOfMonth(
- java.util.Date date )
- {
- /**
- * 詳細設計:
- * 1.如果date在1月,則爲31日
- * 2.如果date在2月,則爲28日
- * 3.如果date在3月,則爲31日
- * 4.如果date在4月,則爲30日
- * 5.如果date在5月,則爲31日
- * 6.如果date在6月,則爲30日
- * 7.如果date在7月,則爲31日
- * 8.如果date在8月,則爲31日
- * 9.如果date在9月,則爲30日
- * 10.如果date在10月,則爲31日
- * 11.如果date在11月,則爲30日
- * 12.如果date在12月,則爲31日
- * 1.如果date在閏年的2月,則爲29日
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- switch ( gc.get( Calendar.MONTH ) )
- {
- case 0:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 1:
- gc.set( Calendar.DAY_OF_MONTH, 28 );
- break;
- case 2:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 3:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 4:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 5:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 6:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 7:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 8:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 9:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 10:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 11:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- }
- //檢查閏年
- if ( ( gc.get( Calendar.MONTH ) == Calendar.FEBRUARY )
- && ( isLeapYear( gc.get( Calendar.YEAR ) ) ) )
- {
- gc.set( Calendar.DAY_OF_MONTH, 29 );
- }
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getLastDayOfMonth(
- java.util.Calendar gc )
- {
- /**
- * 詳細設計:
- * 1.如果date在1月,則爲31日
- * 2.如果date在2月,則爲28日
- * 3.如果date在3月,則爲31日
- * 4.如果date在4月,則爲30日
- * 5.如果date在5月,則爲31日
- * 6.如果date在6月,則爲30日
- * 7.如果date在7月,則爲31日
- * 8.如果date在8月,則爲31日
- * 9.如果date在9月,則爲30日
- * 10.如果date在10月,則爲31日
- * 11.如果date在11月,則爲30日
- * 12.如果date在12月,則爲31日
- * 1.如果date在閏年的2月,則爲29日
- */
- switch ( gc.get( Calendar.MONTH ) )
- {
- case 0:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 1:
- gc.set( Calendar.DAY_OF_MONTH, 28 );
- break;
- case 2:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 3:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 4:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 5:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 6:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 7:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 8:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 9:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- case 10:
- gc.set( Calendar.DAY_OF_MONTH, 30 );
- break;
- case 11:
- gc.set( Calendar.DAY_OF_MONTH, 31 );
- break;
- }
- //檢查閏年
- if ( ( gc.get( Calendar.MONTH ) == Calendar.FEBRUARY )
- && ( isLeapYear( gc.get( Calendar.YEAR ) ) ) )
- {
- gc.set( Calendar.DAY_OF_MONTH, 29 );
- }
- return gc;
- }
- /**
- * 取得指定日期的所處月份的第一天
- *
- * @param date
- * 指定日期。
- * @return 指定日期的所處月份的第一天
- */
- public static synchronized java.util.Date getFirstDayOfMonth( java.util.Date date )
- {
- /**
- * 詳細設計: 1.設置爲1號
- */
- GregorianCalendar gc = ( GregorianCalendar ) Calendar.getInstance();
- gc.setTime( date );
- gc.set( Calendar.DAY_OF_MONTH, 1 );
- return gc.getTime();
- }
- public static synchronized java.util.Calendar getFirstDayOfMonth( java.util.Calendar gc )
- {
- /**
- * 詳細設計: 1.設置爲1號
- */
- gc.set( Calendar.DAY_OF_MONTH, 1 );
- return gc;
- }
- /**
- * 將日期對象轉換成爲指定ORA日期、時間格式的字符串形式。如果日期對象爲空,返回 一個空字符串對象,而不是一個空對象。
- *
- * @param theDate
- * 將要轉換爲字符串的日期對象。
- * @param hasTime
- * 如果返回的字符串帶時間則爲true
- * @return 轉換的結果
- */
- public static synchronized String toOraString( Date theDate, boolean hasTime )
- {
- /**
- * 詳細設計:
- * 1.如果有時間,則設置格式爲getOraDateTimeFormat()的返回值
- * 2.否則設置格式爲getOraDateFormat()的返回值
- * 3.調用toString(Date theDate, DateFormat
- * theDateFormat)
- */
- DateFormat theFormat;
- if ( hasTime )
- {
- theFormat = getOraDateTimeFormat();
- }
- else
- {
- theFormat = getOraDateFormat();
- }
- return toString( theDate, theFormat );
- }
- /**
- * 將日期對象轉換成爲指定日期、時間格式的字符串形式。如果日期對象爲空,返回 一個空字符串對象,而不是一個空對象。
- *
- * @param theDate
- * 將要轉換爲字符串的日期對象。
- * @param hasTime
- * 如果返回的字符串帶時間則爲true
- * @return 轉換的結果
- */
- public static synchronized String toString( Date theDate, boolean hasTime )
- {
- /**
- * 詳細設計:
- * 1.如果有時間,則設置格式爲getDateTimeFormat的返回值
- * 2.否則設置格式爲getDateFormat的返回值
- * 3.調用toString(Date theDate, DateFormat theDateFormat)
- */
- DateFormat theFormat;
- if ( hasTime )
- {
- theFormat = getDateTimeFormat();
- }
- else
- {
- theFormat = getDateFormat();
- }
- return toString( theDate, theFormat );
- }
- /**
- * 標準日期格式
- */
- private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(
- "MM/dd/yyyy" );
- /**
- * 標準時間格式
- */
- private static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat(
- "MM/dd/yyyy HH:mm" );
- /**
- * 帶時分秒的標準時間格式
- */
- private static final SimpleDateFormat DATE_TIME_EXTENDED_FORMAT = new SimpleDateFormat(
- "MM/dd/yyyy HH:mm:ss" );
- /**
- * ORA標準日期格式
- */
- private static final SimpleDateFormat ORA_DATE_FORMAT = new SimpleDateFormat(
- "yyyyMMdd" );
- /**
- * ORA標準時間格式
- */
- private static final SimpleDateFormat ORA_DATE_TIME_FORMAT = new SimpleDateFormat(
- "yyyyMMddHHmm" );
- /**
- * 帶時分秒的ORA標準時間格式
- */
- private static final SimpleDateFormat ORA_DATE_TIME_EXTENDED_FORMAT = new SimpleDateFormat(
- "yyyyMMddHHmmss" );
- /**
- * 創建一個標準日期格式的克隆
- *
- * @return 標準日期格式的克隆
- */
- public static synchronized DateFormat getDateFormat()
- {
- /**
- * 詳細設計: 1.返回DATE_FORMAT
- */
- SimpleDateFormat theDateFormat = ( SimpleDateFormat )
- DATE_FORMAT.clone();
- theDateFormat.setLenient( false );
- return theDateFormat;
- }
- /**
- * 創建一個標準時間格式的克隆
- *
- * @return 標準時間格式的克隆
- */
- public static synchronized DateFormat getDateTimeFormat()
- {
- /**
- * 詳細設計: 1.返回DATE_TIME_FORMAT
- */
- SimpleDateFormat theDateTimeFormat = ( SimpleDateFormat ) DATE_TIME_FORMAT
- .clone();
- theDateTimeFormat.setLenient( false );
- return theDateTimeFormat;
- }
- /**
- * 創建一個標準ORA日期格式的克隆
- *
- * @return 標準ORA日期格式的克隆
- */
- public static synchronized DateFormat getOraDateFormat()
- {
- /**
- * 詳細設計: 1.返回ORA_DATE_FORMAT
- */
- SimpleDateFormat theDateFormat = ( SimpleDateFormat ) ORA_DATE_FORMAT
- .clone();
- theDateFormat.setLenient( false );
- return theDateFormat;
- }
- /**
- * 創建一個標準ORA時間格式的克隆
- *
- * @return 標準ORA時間格式的克隆
- */
- public static synchronized DateFormat getOraDateTimeFormat()
- {
- /**
- * 詳細設計: 1.返回ORA_DATE_TIME_FORMAT
- */
- SimpleDateFormat theDateTimeFormat = ( SimpleDateFormat )
- ORA_DATE_TIME_FORMAT.clone();
- theDateTimeFormat.setLenient( false );
- return theDateTimeFormat;
- }
- /**
- * 將一個日期對象轉換成爲指定日期、時間格式的字符串。 如果日期對象爲空,返回一個空字符串,而不是一個空對象。
- *
- * @param theDate
- * 要轉換的日期對象
- * @param theDateFormat
- * 返回的日期字符串的格式
- * @return 轉換結果
- */
- public static synchronized String toString( Date theDate,
- DateFormat theDateFormat )
- {
- /**
- * 詳細設計:
- * 1.theDate爲空,則返回""
- * 2.否則使用theDateFormat格式化
- */
- if ( theDate == null )
- return "";
- return theDateFormat.format( theDate );
- }
- }