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

/*
 * 日历统一处理类 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());         
    }
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sinshow/archive/2008/03/28/2226689.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值