现在的位置: 首页 > 综合 > 正文

整理Calendar用法

2018年05月21日 ⁄ 综合 ⁄ 共 3681字 ⁄ 字号 评论关闭

以下是Canlendar的经常用到的代码,参考了网上的例子,来源不知道了。

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;
	}
}

抱歉!评论已关闭.