Core Java 应用GregorianCalendar类来显示日历

Core Java 应用GregorianCalendar类来显示日历


import java.text.DateFormatSymbols;
import java.util.*;

public class CalendarTest {
	public static void main(String[] args)
	{
		Locale.setDefault(Locale.US);//设置为美国地区 
		GregorianCalendar d=new GregorianCalendar();
		int today=d.get(Calendar.DAY_OF_MONTH);//用get方法获得当时的日和月
		int month=d.get(Calendar.MONTH);
		
		d.set(Calendar.DAY_OF_MONTH, 1);//将d设置为这个月的第一天
		int weekday=d.get(Calendar.DAY_OF_WEEK);//得到一天为星期几,返回值为SUNDAY、MONDAY...SATURDAY中的一个
		
		int firstDayOfWeek=d.getFirstDayOfWeek();//getFirstDayOfWeek方法获得星期的起始日
		
		int indent=0;
	    //一周的第一天是否是月的第一天,如果不是,则追溯到上个月找到这个周的第一天所在的时间。
		while(weekday != firstDayOfWeek)
		{
			indent++;
			d.add(Calendar.DAY_OF_MONTH, -1);
			weekday=d.get(Calendar.DAY_OF_WEEK);
		}
		
		 /*
	      * DateFormatSymbols 是用于压缩本地化的日期_时间格式化数据,如月份名称、星期名称和时区数据的公有类。 
	       * 
	      * public String[] getShortWeekdays()
	      * 获得短型工作日字符串。 例如:"Sun", "Mon" 等。
	       * 返回值:短型工作日字符串。
	       */ 
	      // print weekday names
		
		String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
		/*
	       * 以下循环操作类似于这个,但是前面一系列操作用于确定第一天是从周几开始(因地区而异)。
	       * 所以不用我下面这两行程序
	       * for(int i=1; i<=7; i++)    
	       * System.out.printf("%s", weekdayNames[i]);
	       *
	       * 此时:weekday == firstDayOfWeek
	       * 但循环为先执行后判断,即从周的选定的第一天开始循环7次
	       */
		do
		{
			System.out.printf("%4s",weekdayNames[weekday]);
			d.add(Calendar.DAY_OF_MONTH, 1);
			weekday=d.get(Calendar.DAY_OF_WEEK);
		}while(weekday!=firstDayOfWeek);
		System.out.println();
		for(int i=1;i<=indent;i++)
		{
			System.out.print("    ");//月的1号一般不是从周的第一天开始。比如:周的第一天是周日,而2011年的第一天是周六,空出前6天的位置。
		}
		d.set(Calendar.DAY_OF_MONTH, 1);
		do
		{
			// print day
			int day=d.get(Calendar.DAY_OF_MONTH);
			System.out.printf("%3d", day);
			
			// mark current day with * ,不是的话用空格分开日期
			if(day==today)
				System.out.print("*");
			else
				System.out.print(" ");
			
			// advance d to the next day
			d.add(Calendar.DAY_OF_MONTH, 1);
			weekday=d.get(Calendar.DAY_OF_WEEK);
			
			 // start a new line at the start of the week 若第二天为一周的第一天则换行
			if(weekday==firstDayOfWeek) 
				System.out.println();
		}while(d.get(Calendar.MONTH)==month);
		// the loop exits when d is day 1 of the next month

	    // print final end of line if necessary
	    if (weekday!=firstDayOfWeek) System.out.println();
	}
}


本来显示的是中文的星期几,结果和底下的数字不对应,强迫症只好改掉了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值