Java中的时间操作详细整理(二)之一个可视化日历小程序的实现

程序说明:

利用java时间类的一些简单api实现了一个可视化的日历程序。即根据你所输入的日期,输出打印对应月份的日历。

实现效果截图:

在这里插入图片描述

源代码:

package com.kjgym.date;

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

/**
 * 可视化日历
 * 
 * @author kangjia
 * @date 2018年9月27日上午9:23:24
 * @version 1.0
 */
public class VisualCalendarV1 {
	public static void main(String[] args) {
		System.out.println("请输入您要查询的日期(格式仿照2018-8-8):");
		Scanner scan = new Scanner(System.in);
		String str = scan.next();
		scan.close();
		new VisualCalendarV1().printCalendar(str);
	}

	/**
	 * 
	 * @Title: printCalendar   
	 * @Description: TODO(根据输入的日期打印对应月份的日历)   
	 * @param: @param str      
	 * @return: void      
	 * @throws
	 */
	public void printCalendar(String str) {
		DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date = sdf.parse(str);
			Calendar c = new GregorianCalendar();
			c.setTime(date);
			c.set(Calendar.DATE, 1); // 设置日期该月的第一天
			int week = c.get(Calendar.DAY_OF_WEEK); // 得到星期的索引周日到周六为1~7
			int year = c.get(Calendar.YEAR);
			int month = c.get(Calendar.MONTH);
			int days = getDays(year, month);
			System.out.println("日\t一\t二\t三\t四\t五\t六");
			for (int i = 1; i <= days; i++) {
				if (i == 1) {
					for (int j = 1; j < week; j++) {
						System.out.print("\t");
					}
				}
				System.out.print(i + "\t");
				week++;
				if (week == 8) {
					System.out.print('\n');
					week = 1;
				}
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 
	 * @Title: getDays   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param year
	 * @param: @param month
	 * @param: @return      
	 * @return: int      
	 * @throws
	 */
	public static int getDays(int year, int month) {
		int days = 0;
		switch (month + 1) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			days = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			days = 30;
			break;
		case 2:
			days = new GregorianCalendar().isLeapYear(year) ? 29 : 28;
			break;
		}
		return days;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值