Условие задачи: День программиста отмечается в 255-й день года (при этом 1 января считается нулевым днем). Требуется написать программу, которая определит дату (месяц и число григорианского календаря), на которую приходится День программиста в заданном году.
Выводить дату необходимо в формате DD/MM/YYYY, где DD — число, MM — номер месяца (01 — январь, 02 — февраль), YYYY — год в десятичной записи
А вводиться целое число от 1 до 9999 включительно, год нашей эры.
Вот код:
Scanner in = new Scanner(System.in);
int YEAR = in.nextInt();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar gCal = new GregorianCalendar(YEAR, 0, 0);
gCal.add(Calendar.DAY_OF_YEAR, 256);
String dayP = sdf.format(gCal.getTime());
System.out.println(dayP);
Не могу понять проблему. В компиляторе всё проходит как мне нужно, в Високосные года день 12/09/2000, в другие он 13/09/2100.
Но сайт не принимает данный код и не проходит 6 тест, не понимаю какие данные не считываются. Может проблемы с Calendar и SDF? Просто небольшой опыт с ними, и я воспользовался этим.
GregorianCalendar по умолчанию поступит как Григорианский календарь только после года 1582.
Вы можете использовать метод setGregorianChange и метод setCalendar для изменения поведения:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
GregorianCalendar gCal = new GregorianCalendar();
gCal.setGregorianChange(new Date(Long.MIN_VALUE));
gCal.set(YEAR, 0, 0);
gCal.add(Calendar.DAY_OF_YEAR, 256);
sdf.setCalendar(gCal);
String dayP = sdf.format(gCal.getTime());
System.out.println(dayP);
int y = in.nextInt();
bool isLeap = y % 4 == 0 && (y % 100 != 0 || y % 400 == 0);
int d = isLeap ? 12 : 13;
System.out.printf("%02d/09/%04d", d, y);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости