网上转的代码,看起来还不错
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar
{
public static void main(String[] args) throws Exception
{
Calendar cal = Calendar.getInstance();
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(
"yyyy-MM-dd");
System.out.println("今天的日期是:" + format.format(cal.getTime()));
// 得到前2天日期
cal.add(Calendar.DATE, -Integer.parseInt("2"));
System.out.println("前天的日期是:" + format.format(cal.getTime()));
// 计算某一月份的最大天数
Calendar time = Calendar.getInstance();
// 在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间
time.clear();
time.set(Calendar.YEAR, 2011);
time.set(Calendar.MONTH, 7);// 注意,Calendar对象默认一月为0
int day = time.getActualMaximum(Calendar.DAY_OF_MONTH);// 本月份的天数
System.out.println("2011年八月的天数为:" + day);
// Calendar转化为Date
cal = Calendar.getInstance();
Date date = cal.getTime();
// Date转化为Calendar
date = new Date();
cal = Calendar.getInstance();
cal.setTime(date);
// 计算某一天是一年中的第几星期
cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno = cal.get(Calendar.WEEK_OF_YEAR);
// 计算一年中的第几星期是几号
cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2011);
cal.set(Calendar.WEEK_OF_YEAR, 2);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
// 2011年第一个星期的星期一是
System.out.println("2011年第一个星期的星期一是:" + format.format(cal.getTime()));
// add()方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
date = cal.getTime();
System.out.println(format.format(date));
cal.add(Calendar.DATE, 4);
date = cal.getTime();
System.out.println(format.format(date));
// roll方法:roll()方法在本月内循环,一般使用add()方法;
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date = cal.getTime();
System.out.println(format.format(date));
cal.roll(Calendar.DATE, 4);
date = cal.getTime();
System.out.println(format.format(date));
// 从 Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象
Calendar calendar = Calendar.getInstance();
if (calendar instanceof GregorianCalendar)
System.out.println("It is an instance of GregorianCalendar");
cal.setTime(new Date());
Calendar cal1 = Calendar.getInstance();
cal1.add(cal1.DATE, 4);
int num = getIntervalDays(cal, cal1);
System.out.println("相差的天数为:" + num + "天");
}
// 计算两个任意时间中间的间隔天数
public static int getIntervalDays(Calendar startday, Calendar endday)
{
// 确保startday在endday之前
if (startday.after(endday))
{
Calendar cal = startday;
startday = endday;
endday = cal;
}
// 分别得到两个时间的毫秒数
long sl = startday.getTimeInMillis();
long el = endday.getTimeInMillis();
long ei = el - sl;
// 根据毫秒数计算间隔天数
return (int) (ei / (1000 * 60 * 60 * 24));
}
// 传进Date对象
/** */
/**
* 计算两个时间之间相隔天数
*
* @param startday
* 开始时间
* @param endday
* 结束时间
* @return
*/
public static int getIntervalDays(Date startday, Date endday)
{
// 确保startday在endday之前
if (startday.after(endday))
{
Date cal = startday;
startday = endday;
endday = cal;
}
// 分别得到两个时间的毫秒数
long sl = startday.getTime();
long el = endday.getTime();
long ei = el - sl;
// 根据毫秒数计算间隔天数
return (int) (ei / (1000 * 60 * 60 * 24));
}
/*
注:以上方法是完全按时间计算,有时并不能令人满意,如:
startday=”2006-10-11 20:00:00″
endday=”2006-10-12 8:00:00″
计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:
在传参之前,先设定endday的时间,如:
Java代码
endday.set(Calendar.HOUR_OF_DAY, 23);
endday.set(Calendar.MINUTE, 59);
endday.set(Calendar.SECOND, 59);
endday.set(Calendar.MILLISECOND, 59);
这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法:
*/
// 改进精确计算相隔天数的方法
public static int getDaysBetween(Calendar d1, Calendar d2)
{
if (d1.after(d2))
{ // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2)
{
d1 = (Calendar) d1.clone();
do
{
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);// 得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
}