import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
*
* 日期操作的工具类
*
* @author huwei(jshuwei.org.cn)
* @since 1.0
*
*/
public class DateUtil {
private static String defDtPtn = "yyyy-MM-dd HH:mm:ss";// 缺省日期格式
/**
* 计算给定时间至今的天数
*
* @since 1.1
* @param date
* 给定的时间
* @return 给定时间至今的天数
*/
public static long date2day(String date) {
long day = 0;
DateFormat df = DateFormat.getDateInstance();
try {
long old = df.parse(date).getTime();
long now = new java.util.Date().getTime();
long secs = now - old;
day = secs / (1000 * 24 * 60 * 60);
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}
/**
* 格式化给定时间后day天的时间
*
* @since 1.0
* @param date
* 需要格式化的时间
* @param day
* 增加的天数
* @return 给定时间的后day天的格式化字符串(如:2008-11-22)
*/
public static String formatDate(java.util.Date date, Integer day) {
String str = "";
str = new Date(date.getTime() day * 24 * 60 * 60).toString();
return str;
}
/**
* 格式化给定时间
*
* @param date
* 需要格式化的时间
* @return 给定时间的格式化字符串(如:2008-11-22)
*/
public static String formatDate(java.util.Date date) {
return new Date(date.getTime()).toString();
}
/**
* 得到当前年
*
* @since 1.0
* @return 返回当前年(YYYY)
*/
public static int getYear() {
return Calendar.getInstance().get(Calendar.YEAR);
}
/**
* 得到当前月
*
* @since 1.0
* @return 返回当前月(1~12)
*/
public static int getMonth() {
return Calendar.getInstance().get(Calendar.MONTH) 1;
}
/**
* 得到当前日
*
* @since 1.0
* @return 返回当前日(1~31)
*/
public static int getDay() {
return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
}
/**
* 得到当前年
*
* @since 1.0
* @return 返回当前年(YY)
*/
public static String getYear2() {
int year = getYear();
return StringUtil.Integer2String(year, "1986").substring(2, 4);
}
/**
* 得到当前月
*
* @since 1.0
* @return 返回当前月(01~12)
*/
public static String getMonth2() {
int month = getMonth();
if (month < 10) {
return "0" StringUtil.Integer2String(month, "00");
}
return StringUtil.Integer2String(month, "00");
}
/**
* 得到当前日
*
* @since 1.0
* @return 返回当前日(01~31)
*/
public static String getDay2() {
int day = getDay();
if (day < 10) {
return "0" StringUtil.Integer2String(day, "00");
}
return StringUtil.Integer2String(day, "00");
}
/**
* 得到指定格式的当前时间
*
* @param format
* 格式化形式(年用YY/YYYY表示;月用M/MM表示;日用D/DD表示,之间任意任序组合),<br />
* 如"YYYY-MM-DD"返回形如:1986-12-17<br />
* 如"YY-MM"返回形如:86-12<br />
* 如"YY年MM月"返回形如:86年12月……
* @since 1.0
* @return 返回指定格式的当前时间
*
*/
public static String getDate(String format) {
format = format.replace("YYYY", getYear() "");
format = format.replace("YY", getYear2());
format = format.replace("MM", getMonth2());
format = format.replace("M", getMonth() "");
format = format.replace("DD", getDay2());
format = format.replace("D", getDay() "");
return format;
}
/**
* 将字符串按指定格式解析成日期对象
*
* @since 1.1
* @param dateStr
* 需要进行转换的日期字符串
* @param pattern
* 日期字符串的格式
* @return "yyyy-MM-dd HH:mm:ss"形式的日期对象
*/
public static java.util.Date parseDate(String dateStr, String pattern) {
SimpleDateFormat DATEFORMAT = new SimpleDateFormat(defDtPtn);
DATEFORMAT.applyPattern(pattern);
java.util.Date ret = null;
try {
ret = DATEFORMAT.parse(dateStr);
} catch (Exception e) {
e.printStackTrace();
}
DATEFORMAT.applyPattern(defDtPtn);
return ret;
}
/**
* 计算详细年龄
*
* @since 1.1
* @param birthdayStr
* 出生日期 格式"YYYY-MM-DD"
* @return 指定日期至今天的年龄
*/
public static String countAge(String birthdayStr) {
String age = "";
if (birthdayStr != null && birthdayStr.length() == 8) {
java.util.Date birthday = parseDate(birthdayStr, "YYYY-MM-DD");
if (birthday != null) {
Calendar calendar = Calendar.getInstance();
int year1 = getYear();
int month1 = StringUtil.String2Integer(getMonth2(), 0);
int day1 = StringUtil.String2Integer(getDay2(), 00);
calendar.setTime(birthday);
int year2 = calendar.get(Calendar.YEAR);
int month2 = calendar.get(Calendar.MONTH) 1;
int day2 = calendar.get(Calendar.DATE);
int year = year1 - year2;
int month = month1 - month2;
int day = day1 - day2;
if (month < 0) {
year = year - 1;
month = 12 month1 - month2;
}
if (day < 0) {
month = month - 1;
if (month < 0) {
year = year - 1;
month = 11;
}
int lastMonthDay = 0;
if (month1 == 0) {
lastMonthDay = getDayOfMonth(12, year1 - 1);
} else {
lastMonthDay = getDayOfMonth(month1, year1);
}
day = lastMonthDay day1 - day2;
}
if (year > 5) {
age = year "岁";
} else if (year > 0) {
if (month == 0) {
age = year "岁";
} else {
age = year "岁" month "月";
}
} else {
if (month > 5) {
age = month "月";
} else if (month > 0) {
age = month "月" day "天";
} else {
age = day "天";
}
}
}
}
return age;
}
/**
* 得到指定年月的天数
*
* @since 1.1
* @param month
* 指定月份
* @param year
* 指定的年份
* @return 天数
*/
public static int getDayOfMonth(int month, int year) {
int ret = 0;
boolean flag = false;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
flag = true;
}
switch (month) {
case 1:
ret = 31;
break;
case 2:
if (flag) {
ret = 29;
} else {
ret = 28;
}
break;
case 3:
ret = 31;
break;
case 4:
ret = 30;
break;
case 5:
ret = 31;
break;
case 6:
ret = 30;
break;
case 7:
ret = 31;
break;
case 8:
ret = 31;
break;
case 9:
ret = 30;
break;
case 10:
ret = 31;
break;
case 11:
ret = 30;
break;
case 12:
ret = 31;
break;
default:
break;
}
return ret;
}
/**
* 计算某天是星期几
*
* @since 1.1
* @param p_date
* 日期字符串
* @return 星期
*/
public static int whatDayIsSpecifyDate(String p_date) {
// 2002-2-22 is friday5
long differenceDays = 0L;
long m = 0L;
differenceDays = signDaysBetweenTowDate(p_date, "2002-2-22");
m = (differenceDays % 7);
m = m 5;
m = m > 7 ? m - 7 : m;
return Integer.parseInt(m "");
}
/**
* 计算两日期间相差天数.
*
* @since 1.1
* @param d1
* 日期字符串
* @param d2
* 日期字符串
* @return long 天数
*/
public static long signDaysBetweenTowDate(String d1, String d2) {
java.sql.Date dd1 = null;
java.sql.Date dd2 = null;
long result = -1l;
try {
dd1 = java.sql.Date.valueOf(d1);
dd2 = java.sql.Date.valueOf(d2);
result = signDaysBetweenTowDate(dd1, dd2);
} catch (Exception ex) {
result = -1;
}
return result;
}
/**
* 计算两日期间相差天数.
*
* @since 1.1
* @param d1
* 开始日期 日期型
* @param d2
* 结束日期 日期型
* @return long 天数
*/
public static long signDaysBetweenTowDate(java.sql.Date d1, java.sql.Date d2) {
return (d1.getTime() - d2.getTime()) / (3600 * 24 * 1000);
}
}
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
*
* 日期操作的工具类
*
* @author huwei(jshuwei.org.cn)
* @since 1.0
*
*/
public class DateUtil {
private static String defDtPtn = "yyyy-MM-dd HH:mm:ss";// 缺省日期格式
/**
* 计算给定时间至今的天数
*
* @since 1.1
* @param date
* 给定的时间
* @return 给定时间至今的天数
*/
public static long date2day(String date) {
long day = 0;
DateFormat df = DateFormat.getDateInstance();
try {
long old = df.parse(date).getTime();
long now = new java.util.Date().getTime();
long secs = now - old;
day = secs / (1000 * 24 * 60 * 60);
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}
/**
* 格式化给定时间后day天的时间
*
* @since 1.0
* @param date
* 需要格式化的时间
* @param day
* 增加的天数
* @return 给定时间的后day天的格式化字符串(如:2008-11-22)
*/
public static String formatDate(java.util.Date date, Integer day) {
String str = "";
str = new Date(date.getTime() day * 24 * 60 * 60).toString();
return str;
}
/**
* 格式化给定时间
*
* @param date
* 需要格式化的时间
* @return 给定时间的格式化字符串(如:2008-11-22)
*/
public static String formatDate(java.util.Date date) {
return new Date(date.getTime()).toString();
}
/**
* 得到当前年
*
* @since 1.0
* @return 返回当前年(YYYY)
*/
public static int getYear() {
return Calendar.getInstance().get(Calendar.YEAR);
}
/**
* 得到当前月
*
* @since 1.0
* @return 返回当前月(1~12)
*/
public static int getMonth() {
return Calendar.getInstance().get(Calendar.MONTH) 1;
}
/**
* 得到当前日
*
* @since 1.0
* @return 返回当前日(1~31)
*/
public static int getDay() {
return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
}
/**
* 得到当前年
*
* @since 1.0
* @return 返回当前年(YY)
*/
public static String getYear2() {
int year = getYear();
return StringUtil.Integer2String(year, "1986").substring(2, 4);
}
/**
* 得到当前月
*
* @since 1.0
* @return 返回当前月(01~12)
*/
public static String getMonth2() {
int month = getMonth();
if (month < 10) {
return "0" StringUtil.Integer2String(month, "00");
}
return StringUtil.Integer2String(month, "00");
}
/**
* 得到当前日
*
* @since 1.0
* @return 返回当前日(01~31)
*/
public static String getDay2() {
int day = getDay();
if (day < 10) {
return "0" StringUtil.Integer2String(day, "00");
}
return StringUtil.Integer2String(day, "00");
}
/**
* 得到指定格式的当前时间
*
* @param format
* 格式化形式(年用YY/YYYY表示;月用M/MM表示;日用D/DD表示,之间任意任序组合),<br />
* 如"YYYY-MM-DD"返回形如:1986-12-17<br />
* 如"YY-MM"返回形如:86-12<br />
* 如"YY年MM月"返回形如:86年12月……
* @since 1.0
* @return 返回指定格式的当前时间
*
*/
public static String getDate(String format) {
format = format.replace("YYYY", getYear() "");
format = format.replace("YY", getYear2());
format = format.replace("MM", getMonth2());
format = format.replace("M", getMonth() "");
format = format.replace("DD", getDay2());
format = format.replace("D", getDay() "");
return format;
}
/**
* 将字符串按指定格式解析成日期对象
*
* @since 1.1
* @param dateStr
* 需要进行转换的日期字符串
* @param pattern
* 日期字符串的格式
* @return "yyyy-MM-dd HH:mm:ss"形式的日期对象
*/
public static java.util.Date parseDate(String dateStr, String pattern) {
SimpleDateFormat DATEFORMAT = new SimpleDateFormat(defDtPtn);
DATEFORMAT.applyPattern(pattern);
java.util.Date ret = null;
try {
ret = DATEFORMAT.parse(dateStr);
} catch (Exception e) {
e.printStackTrace();
}
DATEFORMAT.applyPattern(defDtPtn);
return ret;
}
/**
* 计算详细年龄
*
* @since 1.1
* @param birthdayStr
* 出生日期 格式"YYYY-MM-DD"
* @return 指定日期至今天的年龄
*/
public static String countAge(String birthdayStr) {
String age = "";
if (birthdayStr != null && birthdayStr.length() == 8) {
java.util.Date birthday = parseDate(birthdayStr, "YYYY-MM-DD");
if (birthday != null) {
Calendar calendar = Calendar.getInstance();
int year1 = getYear();
int month1 = StringUtil.String2Integer(getMonth2(), 0);
int day1 = StringUtil.String2Integer(getDay2(), 00);
calendar.setTime(birthday);
int year2 = calendar.get(Calendar.YEAR);
int month2 = calendar.get(Calendar.MONTH) 1;
int day2 = calendar.get(Calendar.DATE);
int year = year1 - year2;
int month = month1 - month2;
int day = day1 - day2;
if (month < 0) {
year = year - 1;
month = 12 month1 - month2;
}
if (day < 0) {
month = month - 1;
if (month < 0) {
year = year - 1;
month = 11;
}
int lastMonthDay = 0;
if (month1 == 0) {
lastMonthDay = getDayOfMonth(12, year1 - 1);
} else {
lastMonthDay = getDayOfMonth(month1, year1);
}
day = lastMonthDay day1 - day2;
}
if (year > 5) {
age = year "岁";
} else if (year > 0) {
if (month == 0) {
age = year "岁";
} else {
age = year "岁" month "月";
}
} else {
if (month > 5) {
age = month "月";
} else if (month > 0) {
age = month "月" day "天";
} else {
age = day "天";
}
}
}
}
return age;
}
/**
* 得到指定年月的天数
*
* @since 1.1
* @param month
* 指定月份
* @param year
* 指定的年份
* @return 天数
*/
public static int getDayOfMonth(int month, int year) {
int ret = 0;
boolean flag = false;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
flag = true;
}
switch (month) {
case 1:
ret = 31;
break;
case 2:
if (flag) {
ret = 29;
} else {
ret = 28;
}
break;
case 3:
ret = 31;
break;
case 4:
ret = 30;
break;
case 5:
ret = 31;
break;
case 6:
ret = 30;
break;
case 7:
ret = 31;
break;
case 8:
ret = 31;
break;
case 9:
ret = 30;
break;
case 10:
ret = 31;
break;
case 11:
ret = 30;
break;
case 12:
ret = 31;
break;
default:
break;
}
return ret;
}
/**
* 计算某天是星期几
*
* @since 1.1
* @param p_date
* 日期字符串
* @return 星期
*/
public static int whatDayIsSpecifyDate(String p_date) {
// 2002-2-22 is friday5
long differenceDays = 0L;
long m = 0L;
differenceDays = signDaysBetweenTowDate(p_date, "2002-2-22");
m = (differenceDays % 7);
m = m 5;
m = m > 7 ? m - 7 : m;
return Integer.parseInt(m "");
}
/**
* 计算两日期间相差天数.
*
* @since 1.1
* @param d1
* 日期字符串
* @param d2
* 日期字符串
* @return long 天数
*/
public static long signDaysBetweenTowDate(String d1, String d2) {
java.sql.Date dd1 = null;
java.sql.Date dd2 = null;
long result = -1l;
try {
dd1 = java.sql.Date.valueOf(d1);
dd2 = java.sql.Date.valueOf(d2);
result = signDaysBetweenTowDate(dd1, dd2);
} catch (Exception ex) {
result = -1;
}
return result;
}
/**
* 计算两日期间相差天数.
*
* @since 1.1
* @param d1
* 开始日期 日期型
* @param d2
* 结束日期 日期型
* @return long 天数
*/
public static long signDaysBetweenTowDate(java.sql.Date d1, java.sql.Date d2) {
return (d1.getTime() - d2.getTime()) / (3600 * 24 * 1000);
}
}