#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 день.
Комментариев нет:
Отправить комментарий