Java GregorianCalendar类学习

本文深入解析Java中的GregorianCalendar类,通过代码实例展示如何创建、设置与获取日期时间属性,包括日期、时间、星期等,适用于Java编程中日期时间处理的基础学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GregorianCalendar这是个超级复杂的类。直接上代码,代码是Java API内提供的,我稍微加了点注释!!!




import java.util.*;

class GregorianCalendarTest 
{
	public static void main(String[] args) 
	{

		/*这是api默认实现中,偏移的值,是当地时间的一个偏移,
		// get the supported ids for GMT-08:00 (Pacific Standard Time)
		String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
		// if no ids were returned, something is wrong. get out.
		if (ids.length == 0)
		System.exit(0);

		// begin output
		System.out.println("Current Time");

		// create a Pacific Standard Time time zone
		SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);

		// set up rules for Daylight Saving Time
		pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
		pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);

		// create a GregorianCalendar with the Pacific Daylight time zone
		// and the current date and time
		Calendar calendar = new GregorianCalendar(pdt);
		Date trialTime = new Date();
		calendar.setTime(trialTime);
		*/

		Calendar calendar = new GregorianCalendar();
		Date trialTime = new Date();
		calendar.setTime(trialTime);

		System.out.println("Date: " + trialTime);
		// print out a bunch of interesting things
		System.out.println("ERA: " + calendar.get(Calendar.ERA));
		System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
		/*
		Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。
		而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,
		JANUARY在Java中返回“0”,所以我们需要+1。
		*/
		System.out.println("MONTH: " + calendar.get(Calendar.MONTH));//从0开始
		System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
		System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
		System.out.println("DATE: " + calendar.get(Calendar.DATE));
		System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
		System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
		/*
		在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因
		Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
		有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
		看下表的返回值
			星期日为一周的第一天	SUN	MON	TUE	WED	THU	FRI	SAT
			DAY_OF_WEEK返回值	 1	 2	 3	 4	 5	 6	 7
			星期一为一周的第一天	MON	TUE	WED	THU	FRI	SAT	SUN
			DAY_OF_WEEK返回值	 1	 2	 3	 4	 5	 6	 7
		所以Calendar.DAY_OF_WEEK需要根据本地化设置的不同而确定是否需要 “-1”
		Java中设置不同地区的输出可以使用 Locale.setDefault(Locale.地区名) 来实现。
		*/
		System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
		System.out.println("DAY_OF_WEEK_IN_MONTH: "+ calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
		// day 所在的周是这个月的第几周,
		/*DAY_OF_WEEK_IN_MONTH与WEEK_OF_MONTH一个意思?
		不是一个意思:
		int day_of_week_in_month = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); //某月中第几周,
		按这个月1号算,1号起就是第1周,8号起就是第2周。以月份天数为标准 
 
		int week_of_month = calendar.get(Calendar.WEEK_OF_MONTH);//日历式的第几周
		(例如今天是2014年4月7日,是4月的第2周)
		*/
		System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
		System.out.println("HOUR: " + calendar.get(Calendar.HOUR));	
		//12小时制的,下午3点,会显示3点
		System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
		//24小时值,下午3点会显示15点
		System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
		System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
		System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
		System.out.println("ZONE_OFFSET: "
						+ (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
		System.out.println("DST_OFFSET: "
						+ (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));

		System.out.println("Current Time, with hour reset to 3");
		calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
		calendar.set(Calendar.HOUR, 3);
		System.out.println("ERA: " + calendar.get(Calendar.ERA));
		System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
		System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
		System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
		System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
		System.out.println("DATE: " + calendar.get(Calendar.DATE));
		System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
		System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
		System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
		System.out.println("DAY_OF_WEEK_IN_MONTH: "
						+ calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
		System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
		System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
		System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
		System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
		System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
		System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
		System.out.println("ZONE_OFFSET: "
			+ (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
		System.out.println("DST_OFFSET: "
			+ (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours
		
	}
}




                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值