/*
* 日历统一处理类 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
java的日期时间处理自定义类
最新推荐文章于 2024-05-24 14:18:15 发布