fork download
  1. import java.util.*;
  2. import java.time.*;
  3. import java.time.format.DateTimeFormatter;
  4.  
  5. class DisplayCalendar {
  6. static Scanner scanner = new Scanner(System.in);
  7.  
  8. static int inputNumber(String message, int min, int max) {
  9. while(true) {
  10. System.out.print(String.format(message + "> ", min, max));
  11. String str = scanner.nextLine();
  12. System.out.println(str);
  13. try {
  14. int number = Integer.parseInt(str);
  15. if (min <= number && number <= max) {
  16. return number;
  17. }
  18. throw new NumberFormatException();
  19. } catch (NumberFormatException e) {
  20. System.out.println("正しい入力ではありません。");
  21. }
  22. }
  23. }
  24.  
  25. static StringBuffer generateCalender(int year, int month) {
  26. YearMonth yearMonth = YearMonth.of(year, month);
  27. StringBuffer buffer = new StringBuffer();
  28.  
  29. DateTimeFormatter titleFormat = DateTimeFormatter.ofPattern(" y年 M月\n");
  30. buffer.append(yearMonth.format(titleFormat));
  31.  
  32. buffer.append("日 月 火 水 木 金 土\n");
  33.  
  34. DayOfWeek firstDayOfMonth = yearMonth.atDay(1).getDayOfWeek();
  35. int numberOfSpace = firstDayOfMonth.getValue() % 7 * 3;
  36. buffer.append(String.format("%-" + numberOfSpace + "s", ""));
  37.  
  38. for (int day = 1, length = yearMonth.lengthOfMonth(); day <= length; day++) {
  39. buffer.append(String.format("%2d ", day));
  40. if (yearMonth.atDay(day).getDayOfWeek() == DayOfWeek.SATURDAY) {
  41. buffer.append("\n");
  42. }
  43. }
  44.  
  45. return buffer;
  46. }
  47.  
  48. public static void main(String[] args) {
  49. DateTimeFormatter todayFormat = DateTimeFormatter.ofPattern("今日はyyyy年MM月dd日です。");
  50. System.out.println(LocalDate.now().format(todayFormat));
  51.  
  52. int year = inputNumber("何年のカレンダーを見ますか?%d~%dまでの数字を入力して下さい。", 2000, 2040);
  53. int month = inputNumber("何月のカレンダーを見ますか?%d~%dまでの数字を入力して下さい。", 1, 12);
  54.  
  55. System.out.println(generateCalender(year, month));
  56. }
  57. }
  58.  
Success #stdin #stdout 0.25s 36096KB
stdin
0
-1
a
null
2016
2

stdout
今日は2018年06月13日です。
何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。> 0
正しい入力ではありません。
何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。> -1
正しい入力ではありません。
何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。> a
正しい入力ではありません。
何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。> null
正しい入力ではありません。
何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。> 2016
何月のカレンダーを見ますか?1~12までの数字を入力して下さい。> 2
     2016年 2月
日 月 火 水 木 金 土
    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