JAVA日期运算工具(含日期字符串运算)—DateCalendar
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateCalendar {
/**
* 日期字符串向后加的结果
*
* @param srcDateStr 日期字符串,支持,YYYY,YYYY-MM,YYYY-MM-DD,YYYY-MM-DD HH:mm:ss
* @param field 时间字段,year,month,date,week,day,hour,minute,second,除了minute都只认第1个字母
* @param addNum 运算数量
* @return
* @throws ParseException
*/
public static String strDateAdd(String srcDateStr, String field, int addNum) throws ParseException {
int specified = getSpecified(field);
return strDateAdd(srcDateStr, specified, addNum);
}
/**
* 日期字符串运算的结果
*
* @param srcDateStr 日期字符串,格式,YYYY,YYYY-MM,YYYY-MM-DD,YYYY-MM-DD HH:mm:ss,yyyy-MM-dd HH:mm:ss.SSS
* @param specified 时间字段类型,Calendar.DAY_OF_MONTH等
* @param addNum 运算数量
* @return
* @throws ParseException
*/
public static String strDateAdd(String srcDateStr, int specified, int addNum) throws ParseException {
Date srcDate = getDate(srcDateStr);
Date newDate = dateAdd(srcDate, specified, addNum);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
return sdf.format(newDate).substring(0, srcDateStr.length());
}
public static Date dateAfter(Date srcDate, String field, int addNum) throws ParseException {
int specified = getSpecified(field);
return dateAdd(srcDate, specified, addNum);
}
public static Date dateAdd(Date srcDate, int specified, int addNum) throws ParseException {
Calendar cal = Calendar.getInstance();
cal.setTime(srcDate);
cal.add(specified, addNum);
return cal.getTime();
}
private static Date getDate(String srcDateStr) throws ParseException {
String dateStr = srcDateStr;
if (dateStr == null) dateStr = "";
if (dateStr.length() == 4) {
dateStr += "-01-01";
} else if (dateStr.length() == 7) {
dateStr += "-01";
}
String fmt = "yyyy-MM-dd";
if (dateStr.length() == 19) {
fmt = "yyyy-MM-dd HH:mm:ss";
} else if (dateStr.length() == 23) {
fmt = "yyyy-MM-dd HH:mm:ss.SSS";
}
SimpleDateFormat df = new SimpleDateFormat(fmt);
return df.parse(dateStr);
}
private static int getSpecified(String field) {
// 时间变动类型,year,month,date,week,day,hour,minute,second,除了minute都只认第1个字母
if (field == null) field = "D";
int itype = Calendar.DAY_OF_MONTH;
field = field.toUpperCase();
if (field.startsWith("Y")) {
itype = Calendar.YEAR;
} else if (field.startsWith("MI")) {
itype = Calendar.MINUTE;
} else if (field.startsWith("M")) {
itype = Calendar.MONTH;
} else if (field.startsWith("D")) {
itype = Calendar.DAY_OF_MONTH;
} else if (field.startsWith("W")) {
itype = Calendar.WEEK_OF_YEAR;
} else if (field.startsWith("H")) {
itype = Calendar.HOUR_OF_DAY;
} else if (field.startsWith("S")) {
itype = Calendar.SECOND;
}
return itype;
}
}
欢迎好评!