java的日期时间处理自定义类

来源:互联网 发布:加拿大高中留学知乎 编辑:程序博客网 时间:2024/05/21 08:53
/*
 * 日历统一处理类 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, 000);
    }


    
/**
     * 指定 年、月、日、时、分、秒
     * 
@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, 
000);
    }


    
/**
     * 指定 年、月、日、时、分、秒
     * 
@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());          
    }

}