1.计算时间差
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义时间格式
Date d1 = df.parse("2012-01-12 23:23:23");//最后时间
Date d2 = df.parse("2012-01-11 23:23:23");//起始时间
long diff = d1.getTime() - d2.getTime();//算出两个时间的秒数差
long days = diff / (1000 * 60 * 60 * 24);//算出两个时间的天树差
//还有一种计算两个时间差的方式(通常用于处理过期问题)如下:
public class TestCompTime {
//比较两个时间相差有没有过1天
public static void main(String args[]) {
Date date = StringForDate("20120529111111", "yyyyMMddHHssmm");
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 2);//规定两时刻相差天数
System.out.println(c.getTime().compareTo(new Date()));//若在此天数内则返回1否则返回-1
}
/**
* 根据指定格式将字符串转日期
*
* @return
*/
public static Date StringForDate(String source, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(pattern);
Date date = null;
try {
date = sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
/**
* 比较两个时间差,返回的是个大于等于或小于零的结果,表示两时间谁大
* @param data1
* @param data2
* @return 返回 c1.compareTo(c2)的值;=0 两时间相等;<0 data1<data2;>0 data1>data2
*/
public static int compareTime(String data1, String data2) {
java.text.DateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Calendar c1=java.util.Calendar.getInstance();
java.util.Calendar c2=java.util.Calendar.getInstance();
try
{
c1.setTime(df.parse(data1));
c2.setTime(df.parse(data2));
}catch(java.text.ParseException e){
System.err.println("日期格式错误");
}
return c1.compareTo(c2);
}
/---------------------------**************-------------------------/
// 默认格式化日期
private static String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
// 默认字符编码
private static String ENCODING = "utf-8";
/**
* 使用系统默认配置格式化日期
*
* @param date
* @return
*/
public static String dateFormatString(Date date) {
return dateFormatString(date, DEFAULT_DATETIME_FORMAT);
}
/**
* 根据指定格式格式化日期
*
* @param date
* @param format
* @return
*/
public static String dateFormatString(Date date, String pattern) {
if (null == date) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(pattern);
return sdf.format(date);
}
/**
* 使用系统默认配置将字符串转日期
*
* @return
*/
public static Date StringForDate(String source) {
return StringForDate(source, DEFAULT_DATETIME_FORMAT);
}
/**
* 根据指定格式将字符串转日期
*
* @return
*/
public static Date StringForDate(String source, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern(pattern);
Date date = null;
try {
date = sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 计算两日期间的天数差
* @param smdate
* @param bdate
* @return
* @throws Exception
*/
public static int daysBetween(Date smdate,Date bdate) throws Exception
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 计算两个日期之间的日期集合
* @param dBegin
* @param dEnd
* @return
* @throws ParseException
*/
public static List<Date> findDates(String start, String end) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dBegin = sdf.parse(start);
Date dEnd = sdf.parse(end);
List<Date> lDate = new ArrayList<Date>();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime()))
{
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
lDate.remove(0);//移除收尾两个日期
if(lDate.size()>0) {
lDate.remove(lDate.size()-1);
}
return lDate;
}