程序说明:
利用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;
}
}