/**/ /* * 日历统一处理类 V1.0 */ import java.text.SimpleDateFormat; import java.util.Calendar; /** */ /** * 日历统一处理类 * 修正了 1、java中的日期getYear()返回要+1900年,getMonth()要+1天的bug * 2、增加了java.util.Date java.sql.Date, Time, Timestamp之间的转换 * @author 吕军 2008.03.28 */ public class NormalDate ... { /** *//** * 内置时间变量 */ private Calendar calendar = Calendar.getInstance(); // <editor-fold defaultstate="collapsed" desc="初始化函数 "> /** *//** * 当前时间 */ public NormalDate() ...{ setTime(new java.util.Date()); } /** *//** * 指定时间 * @param date */ public NormalDate(java.util.Date date) ...{ setTime(date); } /** *//** * 指定时间 * @param timestamp */ public NormalDate(java.sql.Timestamp timestamp) ...{ setTimestamp(timestamp); } /** *//** * 指定 年、月、日 * @param year 年:自然年份,如2008 * @param month 月:1~12,自然月份,如12月 * @param date 日:1~31,如1日 */ public NormalDate(int year, int month, int date) ...{ this(year, month, date, 0, 0, 0); } /** *//** * 指定 年、月、日、时、分、秒 * @param year 年:自然年份,如2008 * @param month 月:1~12,自然月份,如12月 * @param date 日:1~31,如1日 * @param hrs 时:0~23,如0时 * @param min 分:0~59,如59分 * @param sec 秒:0~59,如59秒 */ public NormalDate(int year, int month, int date, int hrs, int min, int sec) ...{ setTime(year, month, date, hrs, min, sec); } /** *//** * 指定 年、月、日、时、分、秒 * @param year 年:自然年份,如2008 * @param month 月:1~12,自然月份,如12月 * @param date 日:1~31,如1日 * @param hrs 时:0~23,如0时 * @param min 分:0~59,如59分 * @param sec 秒:0~59,如59秒 * @param millsec 豪秒:0~9999,如10豪秒 */ public NormalDate(int year, int month, int date, int hrs, int min, int sec, int millsec) ...{ setTime(year, month, date, hrs, min, sec, millsec); } // </editor-fold> defaultstate="collapsed" desc="Constructor " // <editor-fold defaultstate="collapsed" desc="Year, Month, Date, Hour, Minute, Second, MilliSecond 属性"> /** *//** * 取年份 * @return */ public int getYear() ...{ return calendar.get(Calendar.YEAR); } /** *//** * 设置年份 * @param year 年份 */ public void setYear(int year) ...{ calendar.set(Calendar.YEAR, year); } /** *//** * 取月份 1~12,自然月 * @return */ public int getMonth() ...{ return calendar.get(Calendar.MONTH) + 1; // 月份要加1,因为java是从0~11 } /** *//** * 设置月份 1~12,自然月 * @param month 自然月 1~12 */ public void setMonth(int month) ...{ calendar.set(Calendar.MONTH, month - 1); // 月份要-1,因为java是从0~11 } /** *//** * 取月内天数 1~31 * @return */ public int getDate() ...{ return calendar.get(Calendar.DATE); } /** *//** * 设置月内天数 1~31 * @param date 天数 1~31 */ public void setDate(int date) ...{ calendar.set(Calendar.DATE, date); } /** *//** * 取小时 0~23 * @return */ public int getHour() ...{ return calendar.get(Calendar.HOUR_OF_DAY); } /** *//** * 设置小时 0~23 * @param hour 小时 0~23 */ public void setHour(int hour) ...{ calendar.set(Calendar.HOUR_OF_DAY, hour); } /** *//** * 取分钟 0~59 * @return */ public int getMinute() ...{ return calendar.get(Calendar.MINUTE); } /** *//** * 设置分钟 0~59 * @param minute 分钟 0~59 */ public void setMinute(int minute) ...{ calendar.set(Calendar.MINUTE, minute); } /** *//** * 取秒 0~59 * @return */ public int getSecond() ...{ return calendar.get(Calendar.SECOND); } /** *//** * 设置秒 0~59 * @param second 秒 0~59 */ public void setSecond(int second) ...{ calendar.set(Calendar.SECOND, second); } /** *//** * 取豪秒 0~9999 * @return */ public int getMilliSecond() ...{ return calendar.get(Calendar.MILLISECOND); } /** *//** * 设置豪秒 * @param millisecond 豪秒 0~9999 */ public void setMilliSecond(int millisecond) ...{ calendar.set(Calendar.MILLISECOND, millisecond); } // </editor-fold> defaultstate="collapsed" desc="Year, Month, Date, Hour, Minute, Second, MilliSecond Property" /** *//** * 增加时间 如加1天 add(NormalDate.DATE, 1) * @param field 字段:YEAR, MONTH, DATE=DATE_OF_MONTH, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND * @param amount 增加量 * * @see #YEAR * @see #MONTH * @see #DATE * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #MILLISECOND */ public void add(int field, int amount) ...{ calendar.add(field, amount); } /** *//** * 保留年月日,清除时间部分 */ public void clearTime() ...{ calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); } /** *//** * 指定 年、月、日 * @param year 年:自然年份,如2008 * @param month 月:1~12,自然月份,如12月 * @param date 日:1~31,如1日 */ public void setTime(int year, int month, int date) ...{ setTime(year, month, date, 0, 0, 0); } /** *//** * 指定 年、月、日、时、分、秒 * @param year 年:自然年份,如2008 * @param month 月:1~12,自然月份,如12月 * @param date 日:1~31,如1日 * @param hrs 时:0~23,如0时 * @param min 分:0~59,如59分 * @param sec 秒:0~59,如59秒 */ public void setTime(int year, int month, int date, int hrs, int min, int sec) ...{ calendar.clear(); month = month - 1;// 月份要减1,因为java是从0~11 calendar.set(year, month, date, hrs, min, sec); } /** *//** * 指定 年、月、日、时、分、秒、豪秒 * @param year 年:自然年份,如2008 * @param month 月:1~12,自然月份,如12月 * @param date 日:1~31,如1日 * @param hrs 时:0~23,如0时 * @param min 分:0~59,如59分 * @param sec 秒:0~59,如59秒 * @param millsec 豪秒:0~9999,如10豪秒 */ public void setTime(int year, int month, int date, int hrs, int min, int sec, int millsec) ...{ calendar.clear(); month = month - 1;// 月份要减1 calendar.set(year, month, date, hrs, min, sec); calendar.set(Calendar.MILLISECOND, millsec); } /** *//** * 指定时间 * @param date */ public void setTime(java.util.Date date) ...{ calendar.setTime(date); } /** *//** * 指定时间 * @param timestamp */ public void setTimestamp(java.sql.Timestamp timestamp) ...{ calendar.setTimeInMillis(timestamp.getTime()); } /** *//** * 从字符串解释时间 * @param datetime 时间 * @param partten 格式 */ public void parseDate(String datetime, String partten) ...{ SimpleDateFormat formatter = new SimpleDateFormat(partten); try ...{ this.calendar.setTime(formatter.parse(datetime)); this.calendar.setTimeInMillis(new java.sql.Timestamp(formatter.parse(datetime).getTime()).getTime()); //return this; } catch (Exception e) ...{ throw new RuntimeException(e.getMessage()); } } /** *//** * 转成字符串:格式yyyy-MM-dd HH:mm:ss * @return */ @Override public String toString() ...{ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format.format(calendar.getTime()); } /** *//** * 获取字符串 * @param partten 格式 * @return */ public String stringValue(String partten) ...{ SimpleDateFormat format = new SimpleDateFormat(partten); return format.format(calendar.getTime()); } /** *//** * 获取 java.util.Date * @return */ public java.util.Date dateValue() ...{ return calendar.getTime(); } /** *//** * 获取 java.sql.Date * @return */ public java.sql.Date sqldateValue() ...{ return new java.sql.Date(calendar.getTime().getTime()); } /** *//** * 获取 java.sql.Time * @return */ public java.sql.Time sqltimeValue() ...{ return new java.sql.Time(calendar.getTime().getTime()); } /** *//** * 获取 java.sql.Timestamp * @return */ public java.sql.Timestamp timestampValue() ...{ return new java.sql.Timestamp(calendar.getTime().getTime()); } // <editor-fold defaultstate="collapsed" desc="指示add的类型的常量"> /** *//** * 年[字段常量],用于 add函数. * * @see #MONTH * @see #DATE * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int YEAR = 1; /** *//** * 月份[字段常量],用于 add函数. * * @see #YEAR * @see #DATE * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int MONTH = 2; /** *//** * 天[字段常量],用于 add函数. 与<code>DATE_OF_MONTH</code>等同 * * @see #YEAR * @see #MONTH * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int DATE = 5; /** *//** * 天[字段常量],用于 add函数 与<code>DATE</code>等同. * @see #YEAR * @see #MONTH * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int DAY_OF_MONTH = 5; /** *//** * 小时[字段常量],0~23,用于 add函数 * * @see #YEAR * @see #MONTH * @see #DATE * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int HOUR_OF_DAY = 11; /** *//** * 分钟[字段常量],用于 add函数 * * @see #YEAR * @see #MONTH * @see #DATE * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #SECOND * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int MINUTE = 12; /** *//** * 秒[字段常量],用于 add函数 * * @see #YEAR * @see #MONTH * @see #DATE * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #MILLISECOND * @see #add(int field, int amount) */ public final static int SECOND = 13; /** *//** * 微秒[字段常量],用于 add函数 * * @see #YEAR * @see #MONTH * @see #DATE * @see #DAY_OF_MONTH * @see #HOUR_OF_DAY * @see #MINUTE * @see #SECOND * @see #add(int field, int amount) */ public final static int MILLISECOND = 14;// </editor-fold> defaultstate="collapsed" desc="指示add的类型的常量" public static void main(String[] args) ...{ NormalDate date = new NormalDate(); System.out.println("当前时间: " + date.stringValue("yyyy-MM-dd HH:mm:ss")); System.out.println("toString(): " + date.toString()); System.out.println("java.util.Date .toString(): " + date.dateValue().toString()); System.out.println("java.sql.date: " + date.sqldateValue()); System.out.println("java.sql.time: " + date.sqltimeValue()); System.out.println("getMonth(): " + date.getMonth()); System.out.println("java.util.Date .getMonth(): " + date.dateValue().getMonth()); }}