Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Вывод календаря на заданый месяц

#java #календарь


Суть в том, что никак не считает правильно пробелы в первой неделе. Постоянно бред
какой-то получается. При любом месяце. Задавал уже разные годы и месяцы. Не пойму в
чем беда. Помогите.

import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class JavaApplication1 {
public static void main(String[] args){
    Date time = new Date();
    System.out.println(time);
    GregorianCalendar now = new GregorianCalendar();
    int today = now.get(Calendar.DAY_OF_MONTH);
    int month = now.get(Calendar.MONTH);
    now.set(Calendar.DAY_OF_MONTH, 1);
    int weekday = now.get(Calendar.DAY_OF_WEEK);
    int FirstDayOfWeek = now.getFirstDayOfWeek();
    int in = 0;
    while (weekday != FirstDayOfWeek){
        in++; //счетчик
        now.add(Calendar.DAY_OF_MONTH, -1);
        weekday = now.get(Calendar.DAY_OF_WEEK);
    }
    String [] WeekDayNames = new DateFormatSymbols().getShortWeekdays();
    do{
        System.out.printf("%4s", WeekDayNames[weekday]);
        now.add(Calendar.DAY_OF_MONTH, 1);
        weekday = now.get(Calendar.DAY_OF_WEEK);
    }while(weekday != FirstDayOfWeek);
    System.out.println();
    for(int i = 1; i<=in; i++)
        System.out.print(" ");//тут выводит пробелы на первой неделе месяця

    now.set(Calendar.DAY_OF_MONTH, 1);
    do{
        int day = now.get(Calendar.DAY_OF_MONTH);
        System.out.printf("%3d", day);
        if(day == today)
            System.out.print("*");
        else
            System.out.print(" ");
        now.add(Calendar.DAY_OF_MONTH, 1);
        weekday = now.get(Calendar.DAY_OF_WEEK);
        if (weekday == FirstDayOfWeek)
            System.out.println();
    }
    while(now.get(Calendar.MONTH) == month);
    if(weekday != FirstDayOfWeek)
        System.out.println();
}


}


    


Ответы

Ответ 1



У вас в in - разница в днях между первым днем недели и началом месяца. Каждый день в календаре занимает 3 позиции на число (формат "%3d") и одну позицию на маркер текущего дня ( " " или "*"). Поэтому вам в цикле надо выводит по 4 пробела на 1 день.

Комментариев нет:

Отправить комментарий