可视化日历的实现

一个小程序,欢迎大家批评指导可怜

这是一个用Date和DateFormat等常用类编写的可视化日历,刚学的常用类,一些不足之处还望高手指点。下面附上代码。

package com.HW7_31;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/**
 * 2.打印某个月份的可视化日历
 * 
 * @author fxz
 *
 *         思路: 输入月份与年份,日期默认为1号,以此求得当前日期是星期几,
 */
public class HW6_2 {

	public static void main(String[] args) throws ParseException {
		Scanner sc = new Scanner(System.in);
		System.out.println("请按照当前格式输入年份与月份:2012-1");
		String d = sc.next();
		//把输入的年月添加上“1号”,以便days方法进行格式化
		String date = d + "-1";
		//分割年月字符串,获得年和月,使用数组ar[1]存放并转成整型赋给year(年)和mm(月)
		String[] ar = d.split("-");
		int mm = Integer.parseInt(ar[1]);
		int year = Integer.parseInt(ar[0]);
		// 数组存放三种月份天数
		int arr[] = { 0, 30, 31 };
		// 判断二月的天数,即arr[0]
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
			arr[0] = 29;
		} else
			arr[0] = 28;
		// 将days方法返回的第一天周日改为第一天周一
		int num = days(date) - 1;
		// 判断当月一号是不是第一天,是就不再减一
		if (num == 0) {
			num = 1;
		}
		// 制表输出星期
		System.out.print("星期一  \t" + "星期二  \t" + "星期三  \t" + "星期四  \t" + "星期五  \t" + "星期六 \t" + "星期天  \t\n\n");
		// 判断哪个月份,每个月份对应相应天数
		if (mm == 4 || mm == 6 || mm == 9 || mm == 11) {
			//调用打印方法打印
			print(arr[1], num);
		} else if (mm == 2) {
			print(arr[0], num);
		} else {
			print(arr[2], num);
		}

	}

	// 此方法负责打印日历
	public static void print(int s, int num) {
		for (int i = 1; i <= s + num - 1; i++) {
			//前num个需要打空格,直接用制表符
			if (i <= num - 1) {
				System.out.print("\t");
			} else {
				//输出i,需要减去前边的空格数,前边+两个空格美化
				System.out.print("  " + (i - num + 1) + "\t");
			}
			if (i % 7 == 0) {
				System.out.println();
			}
		}
	}

	// 此方法根据传进来的从控制台输入的年月判断这周第几天并返回(周日第一天)
	public static int days(String date) throws ParseException {
		SimpleDateFormat si = new SimpleDateFormat("yyyy-MM-dd");
		Date da = si.parse(date);
		Calendar ca = Calendar.getInstance();
		ca.setTime(da);
		return ca.get(Calendar.DAY_OF_WEEK);
	}

}




                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值