package com.xinnet.icp.util;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期处理类
* @author 林阳(linyang@ceopen.cn)
* @date 2009-12-07
*/
public abstract class DateUtil {
/**
* 构造方法
*/
private DateUtil() {
}
/**
* 格式化字符串
* @param date
* @return
*/
public static String getFormatDate(Timestamp timestamp) {
Date date = new Date(timestamp.getTime());
String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
return simpleDateFormat.format(date);
}
public static String getFormatDateTime(Timestamp timestamp) {
Date date = new Date(timestamp.getTime());
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
return simpleDateFormat.format(date);
}
/**
* 根据指定格式得到当前日期的字符串 默认格式为 yyyy-MM-dd HH:mm:ss
* @param pattern String
* @return String
*/
public static String getCurrentDate(String pattern) {
if (pattern == null || pattern.trim().equals("")) {
pattern = "yyyy-MM-dd HH:mm:ss";
}
pattern = pattern.trim();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
return simpleDateFormat.format(new Date());
}
/**
* 以默认格式[yyyy-MM-dd]得到当前日期的字符串
* @return String
*/
public static String getCurrentDate() {
return getCurrentDate("yyyy-MM-dd");
}
/**
* 滚动日期
* @param timestamp 被滚动的日期
* @param calendarField 日历字段
* @param rollAmount 滚动量
* @return Timestamp
*/
public static Timestamp getRollTime(Timestamp timestamp, int calendarField, int rollAmount) {
// AssertUtil.notNull(timestamp, "日期");
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(timestamp.getTime()));
cal.add(calendarField, rollAmount);
return new Timestamp(cal.getTimeInMillis());
}
/**
* 年滚动
* @param timestamp Timestamp
* @param rollAmount 滚动量
* @return Timestamp
*/
public static Timestamp getRollYear(Timestamp timestamp, int rollAmount) {
return getRollTime(timestamp, Calendar.YEAR, rollAmount);
}
/**
* 月滚动
* @param timestamp Timestamp
* @param rollAmount 滚动量
* @return Timestamp
*/
public static Timestamp getRollMonth(Timestamp timestamp, int rollAmount) {
return getRollTime(timestamp, Calendar.MONTH, rollAmount);
}
/**
* 天滚动
* @param timestamp Timestamp
* @param rollAmount 滚动量
* @return Timestamp
*/
public static Timestamp getRollDay(Timestamp timestamp, int rollAmount) {
return getRollTime(timestamp, Calendar.DAY_OF_WEEK, rollAmount);
}
/**
* 两个日期相差的天数
* @param bigTime 大日期
* @param littleTime 小日期
* @return int 相差的天数
*/
public static int getIntervalDays(Timestamp bigTime, Timestamp littleTime) {
String t1str = DateUtil.getTimestampStr(bigTime);
String t2str = DateUtil.getTimestampStr(littleTime);
Timestamp t1 = DateUtil.getTimestamp(t1str);
Timestamp t2 = DateUtil.getTimestamp(t2str);
long intervalTime = t1.getTime() - t2.getTime();
int intervalDay = (int) (intervalTime / 1000 / 60 / 60 / 24);
return intervalDay;
}
/**
* 两个日期相差的月数(退费的情况)
* @param bigTime 大日期
* @param littleTime 小日期
* @return int 相差的月数
*/
public static int getIntervalRefundMonths(Timestamp bigTime, Timestamp littleTime) {
return getIntervalChargeMonths(bigTime, littleTime);
}
/**
* 两个日期相差的月数(收费的情况)
* @param bigTime 大日期
* @param littleTime 小日期
* @return int 相差的月数
*/
public static int getIntervalChargeMonths(Timestamp bigTime, Timestamp littleTime) {
Calendar bigCalendar = Calendar.getInstance();
bigCalendar.setTime(new Date(bigTime.getTime()));
Calendar littleCalendar = Calendar.getInstance();
littleCalendar.setTime(new Date(littleTime.getTime()));
int intervalYear = getIntervalYears(bigTime, littleTime);
int intervalMonth = bigCalendar.get(Calendar.MONTH) - littleCalendar.get(Calendar.MONTH);
int n = intervalYear * 12 + intervalMonth;
n = n < 0 ? 0 : n;
return n;
}
/**
* 两个日期相差的年数
* @param bigTime Timestamp
* @param littleTime Timestamp
* @return int
*/
public static int getIntervalYears(Timestamp bigTime, Timestamp littleTime) {
Calendar bigCalendar = Calendar.getInstance();
bigCalendar.setTime(new Date(bigTime.getTime()));
Calendar littleCalendar = Calendar.getInstance();
littleCalendar.setTime(new Date(littleTime.getTime()));
return bigCalendar.get(Calendar.YEAR) - littleCalendar.get(Calendar.YEAR);
}
/**
* 得到日期字符串
* @param timestamp Timestamp
* @return String
*/
public static String getTimestampStr(Timestamp timestamp) {
String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
return simpleDateFormat.format(new Date(timestamp.getTime()));
}
/**
* 日期比较,t1>t2则返回true
* @param t1
* @param t2
* @return t1>t2则返回true
*/
public static boolean compareDate(Timestamp t1, Timestamp t2) {
String d1 = DateUtil.getFormatDate(t1);
String d2 = DateUtil.getFormatDate(t2);
return d1.compareTo(d2) > 0;
}
/**
* 日期时间比较,t1>t2则返回true
* @param t1
* @param t2
* @return t1>t2则返回true
*/
public static boolean compareDateTime(Timestamp t1, Timestamp t2) {
String d1 = DateUtil.getFormatDateTime(t1);
String d2 = DateUtil.getFormatDateTime(t2);
return d1.compareTo(d2) > 0;
}
public static Timestamp getTimestamp(String dateStr) {
String year = dateStr.substring(0, 4);
String month = dateStr.substring(5, 7);
if (month.startsWith("0")) {
month = month.substring(1);
}
String day = dateStr.substring(8, 10);
if (day.startsWith("0")) {
day = day.substring(1);
}
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.parseInt(year));
cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return new Timestamp(cal.getTimeInMillis());
}
/**
* 日期比较,t1==t2则返回true
* @param t1
* @param t2
* @return
*/
public static boolean equalDate(Timestamp t1, Timestamp t2) {
String d1 = DateUtil.getFormatDate(t1);
String d2 = DateUtil.getFormatDate(t2);
return d1.equals(d2);
}
/**
* 测试方法
* @param args String[]
*/
public static void main(String[] args) {
}
}