import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 日期操作
*
* @author leida
*/
@SuppressWarnings("boxing")
public class DateUtil {
/**
*
*/
public final static String YYYY_MM_DD_HH_MM_SS_SS = "yyyy-MM-dd HH:mm:ss:SS";
/**
*
*/
public final static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
/**
*
*/
public final static String YYYY_MM_DD = "yyyy-MM-dd";
/**
*
*/
public final static String YYYYMM = "yyyyMM";
/**
*
*/
public final static String YYMM = "yyMM";
/***/
public final static String YYYY="yyyy";
/**
*
*/
private DateUtil() {}
/**
* @return java.util.Date
*/
public final static java.util.Date getNow() {
SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
try {
return sdf.parse(getNowTime());
}
catch (ParseException e) {
e.printStackTrace();
}
return new java.util.Date();
}
/**
* @return String
*/
public final static String getNowTime() {
SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
return sdf.format(new GregorianCalendar().getTime());
}
/**
* @param date
* @param pattern
* @return Date
* @throws ParseException
*/
public final static java.util.Date stringTodate(String date, String pattern)
throws ParseException {
if (date == null || pattern == null)
return null;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(date);
}
/**
*
* @author janson
* @date 2007-10-31
* @param startDate
* @param endDate
* @return Long
*/
public final static Long calculateDate(Date startDate,Date endDate){
if(startDate.compareTo(endDate)>0){
return Long.valueOf(0);
}
Long temp=endDate.getTime()-startDate.getTime();
return (temp/1000/60/60/24);
}
/**
* @param date
* @param pattern
* @return String
*/
public final static String convDateToString(Date date, String pattern) {
if (date == null || pattern == null)
return null;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 根据日期得到年,月,日
* @param date
* @param part yyyy,MM,dd
* @return String
*/
public final static String getPartDate(Date date, String part) {
if (date == null || part == null)
return null;
SimpleDateFormat sdf = new SimpleDateFormat(part);
return sdf.format(date);
}
/**
* 根据日期得到年,月,日
* @param month 1-12不包括0
* @return String
*/
public final static String getZeroMonth(Integer month) {
if (month == null || month.compareTo(0)==0)
return "";
if(month>0 && month<10)
{
return "0"+String.valueOf(month);
}
return String.valueOf(month);
}
/**
* 时间加减运算<br>
* java中对日期的加减操作<br>
* gc.add(1,-1)表示年份减一.<br>
* gc.add(2,-1)表示月份减一.<br>
* gc.add(3.-1)表示周减一.<br>
* gc.add(5,-1)表示天减一.<br>
* 以此类推应该可以精确的毫秒吧.没有再试.大家可以试试.<br>
* GregorianCalendar类的add(int field,int amount)方法表示年月日加减.<br>
* field参数表示年,月.日等.<br>
* amount参数表示要加减的数量.<br>
*
* @param date
* @param pattern
* @param category 运算种类,例如:天之间运算,月之间运算
* @param number 正数代表加、负数代表减
* @return String
*/
public final static String calcDate(Date date, String pattern, int category, int number) {
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.add(category, number);
gc.set(gc.get(Calendar.YEAR), gc.get(Calendar.MONTH), gc.get(Calendar.DATE));
return convDateToString(gc.getTime(), pattern);
}
/**
* 根据日期计算这个星期的星期一是多少,并且星期一以00:00:00开头
*
* @param queryDate
* @return String[]
* @throws ParseException
*/
public static String calcMonday(String queryDate) throws ParseException {
String date;
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
gc.setTime(df.parse(queryDate));
gc.add(5, -1);
while (gc.get(7) != 1) {
gc.add(5, -1);
}
gc.add(5, 1);
date = df.format(gc.getTime()) + " 00:00:00";
return date;
}
/**
* 根据日期计算这个星期的星期日是多少,并且星期日以23:59:59开头
*
* @param queryDate
* @return String[]
* @throws ParseException
*/
public static String calcSunday(String queryDate) throws ParseException {
String date;
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
gc.setTime(df.parse(queryDate));
gc.add(5, -1);
while (gc.get(7) != 7) {
gc.add(5, 1);
}
gc.add(5, 1);
date = df.format(gc.getTime()) + " 23:59:59";
return date;
}
/**
* 根据日期计算这个月的第一天是几号
*
* @param queryDate
* @return String
* @throws ParseException
*/
public static Date calcBeginMonth(String queryDate) throws ParseException {
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
gc.setTime(df.parse(queryDate));
int i = gc.get(Calendar.MONTH);
// 11表示第12月
while (gc.get(Calendar.MONTH) != (i==0?11:i-1)) {
gc.add(5, -1);
}
gc.add(5, 1);
return gc.getTime();
}
/**
* 根据日期计算这个月的最后一天是几号
*
* @param queryDate
* @return String
* @throws ParseException
*/
public static Date calcEndMonth(String queryDate) throws ParseException {
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
gc.setTime(df.parse(queryDate));
int i = gc.get(Calendar.MONTH);
//11表示第12月
while (gc.get(Calendar.MONTH) != (i==11?0:i+1)) {
gc.add(5, 1);
}
gc.add(5, -1);
return gc.getTime();
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(calcBeginMonth("2007-1-15"));
System.out.println(calcEndMonth("2007-11-29"));
}
catch (ParseException e) {
e.printStackTrace();
}
System.out.println(getPartDate(new Date(),"yyyy/MM"));
}
}
如果是相减使用:
DateUtil.calcDate(new Date(),"yyyy-MM-dd",5,-10);