【Java】编写日历

由于我在1月之前有一段时间没有碰过Java,所以我决定尝试用Java编写之前用Ruby编写过的程序。这次的问题是创建一个日历。

如果对于输出的话题感到困惑,那就参考这个吧!
据此文章中提供的参考,我正在解决问题。

【Ruby】解决日历创建问题

问题是以以下形式显示本月日历。

     April 2013
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

这次我用Java编写的程序在这里。为了不仅能查看本月的情况,还可以了解其他年份和其他月份的数据,我将年份和月份变量分开了。

package example;

import java.util.Calendar;
import java.util.Collections;

public class CreateCalendar {

	public static void main(String[] args) {
		Calendar cl = Calendar.getInstance();
		
		int thisYear = cl.get(Calendar.YEAR); //今年
		int thisMonth = cl.get(Calendar.MONTH); //今月(1月=0、2月=1であるため配列monthの添字に使用)
		outputCalendar(thisYear,thisMonth);
		
		//他の年、他の月の場合の確認用
		System.out.println("\n");
		int otherYear = 2013; //西暦を入力
		int otherMonth = 4; //月を入力
		outputCalendar(otherYear,otherMonth - 1);
		
	}
	
	public static void outputCalendar(int inputYear, int inputMonth) {
		Calendar cl = Calendar.getInstance();
		
		String[] month = {"January","February","March","April","May","June",
				"July","August","September","October","November","December"};
		String[] week = {"Su","Mo","Tu","We","Th","Fr","Sa"};
		
		int firstDay = 1; //月の初日
		//月の初日の曜日(日曜日=1、月曜日=2であるため-1をして配列weekの添字に使用)
		cl.set(inputYear,inputMonth,firstDay);
		int firstDayWeek = cl.get(Calendar.DAY_OF_WEEK) - 1; 
		int lastDay = cl.getActualMaximum(Calendar.DAY_OF_MONTH); //月の最終日

		System.out.print("     " + month[inputMonth] + " " +  inputYear); //年と月を出力
		System.out.println(); 

		//カレンダーの曜日を出力
		for (int i = 0; i < week.length; i++) {
			System.out.printf("%2s ",week[i]);
		}
		System.out.println();
		//初日が何曜日かに合わせて空白を出力
		System.out.print(String.join("", Collections.nCopies(firstDayWeek, "   ")));
		//日付を出力
		for (int i = firstDay; i <= lastDay; i++) {
			System.out.printf("%2d ",i);
			if ((firstDayWeek + i) % 7 == 0) {
				System.out.println();
			}			
		}
	}
}

这是输出结果。

     March 2022
Su Mo Tu We Th Fr Sa 
       1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30 31 

     April 2013
Su Mo Tu We Th Fr Sa 
    1  2  3  4  5  6 
 7  8  9 10 11 12 13 
14 15 16 17 18 19 20 
21 22 23 24 25 26 27 
28 29 30 
广告
将在 10 秒后关闭
bannerAds