利用Calendar类实现更多功能动态日历

利用Calendar类实现更多功能动态日历

第一篇博客写的就是动态日历,不过当时动态日历的实现用了太多for循环语句和switch语句,而且只是实现了日期显示,功能较单一,今天我用JDK中的Calendar类来更加简单地实现动态日历,输入年份、月份获得当月日历,若输入年份、月份是当前系统时间所在月份,就用“ * * ”标记系统当天日期,用“ |  | ”标记周六和周日,并按照   "年 / 月 / 日   时: 分: 秒"的格式输出系统当前时间

以下我先介绍 Calendar 的用法,让同学们对Calendar类有初步的了解

Calendar类

Calendar类是java.util包中提供的一个抽象类,该类从JDK1.1开始出现,作为Date类的替代方案,Calendar类中包含了对不同国家地区日历的处理,Calendar类常见的子类为:java.util.GregorianCalendar;获取Calendar对象一般使用类中提供的静态方法:getInstance(),有关Calendar类的具体使用如下:

public class CalendarDemo {

	public static void main(String[] args) {

		// 获取一个Calendar实例(以当前系统时间为依据)
		Calendar c = Calendar.getInstance();
		// 获取日历所表示日期中的年份
		System.out.println(c.get(Calendar.YEAR));
		// 获取日历所表示日期中的月份
		System.out.println(c.get(Calendar.MONTH) + 1);
		// 获取日历所表示日期月份中的天数
		System.out.println(c.get(Calendar.DAY_OF_MONTH));

		// 获取小时数
		System.out.println(c.get(Calendar.HOUR));
		// 获取分钟数
		System.out.println(c.get(Calendar.MINUTE));
		// 获取秒钟数
		System.out.println(c.get(Calendar.SECOND));
		
		//设置日历中指定字段的值
		c.set(Calendar.MONTH, 5); 
		//获取当前日历所表示的字段具备的最大值
		System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));
		
		//设置日历中的日期为月份中的第一天
		c.set(Calendar.DAY_OF_MONTH, 1);
		//当前月份的第一天是星期几?(周天是第一天)
		System.out.println(c.get(Calendar.DAY_OF_WEEK));
		
		
		System.out.println(c);
	}
}

动态日历

正文开始,其中输出系统当前时间用到了Date类、DateFormat类和SimpleDateFormat类,还有需要注意的是Calendar.MONTH获得的月份会比系统月份小1,Calendar.DAY_OF_MONTH日历中月份中的第一天为周日

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
 * 
 * @author max
 *
 */
public class MyCalendar {

	Calendar c = Calendar.getInstance();
	Scanner sc = new Scanner(System.in);

	public void show() {
		int index = 0;
		Date d = new Date();
		System.out.println("请输入年份");
		int year = sc.nextInt();
		c.set(Calendar.YEAR, year);
		System.out.println("请输入月份");
		int month = sc.nextInt();
		int thismonth = c.get(Calendar.MONTH) + 1;
		int today = c.get(Calendar.DAY_OF_MONTH);
		c.set(Calendar.MONTH, month - 1);
		c.set(Calendar.DAY_OF_MONTH, 1);
		int n = c.get(Calendar.DAY_OF_WEEK);
		DateFormat fmt =  new SimpleDateFormat("yyyy/MM/dd/ HH:mm:ss");
		System.out.println(fmt.format(d));
		System.out.println("====================================================");
		System.out.println("一\t" + "二\t" + "三\t" + "四\t" + "五\t" + "六\t" + "日\t");
		System.out.println("====================================================");
		for (int i = 0; i < n - 2; i++) {
			System.out.print("\t");
			index++;
		}
		for (int j = 1; j <= c.getActualMaximum(Calendar.DAY_OF_MONTH); j++) {
			if (index % 7 == 6 || index % 7 == 5) {
				if (j == today && month == thismonth) {
					System.out.print("|*" + j + "*|\t");
				} else {
					System.out.print("|" + j + "|\t");
				}
			} else {
				if (j == today && month == thismonth) {
					System.out.print("*" + j + "*\t");
				} else {
					System.out.print(j + "\t");
				}
			}
			index++;
			if (index % 7 == 0) {
				System.out.println();
			}
		}
	}

	public static void main(String[] args) {
		new MyCalendar().show();
	}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值