Вы делаете вещи в неправильном порядке.Поскольку ваш код в вопросе стоит, вот что произошло:
- Вы инициализируете
month2
, day2
и year2
в 0. - Вы создаете свой
GregorianCalendar
объект из этих переменных, имеющий значение 0. Это дает вам среду, 31 декабря, год 2 до н.э. (нет года 0, поэтому вы устанавливаете 0 января 1 года до н.э., что равно 31 декабря 2 года до н.э. - сбивает с толку, но для GregorianCalendar
это правда).Затем вы берете день недели в userweekday
(всегда равный Calendar.WEDNESDAY
). - Наконец, в строках
year2 = Integer.parseInt(useryear);
и т. Д. Вы назначаете пользовательский ввод для переменных.Это не влияет на объект GregorianCalendar
, который вы уже создали, и на день недели, уже полученный от этого GregorianCalendar
.
Поэтому среда всегда будет напечатана.
КакКроме того, класс GregorianCalendar
давно устарел и имеет проблемы с дизайном.Среди других вопросов часто требуется подробный код, который также может быть подвержен ошибкам.И это исчисляется месяцами неожиданным образом.Вместо этого я предлагаю вам использовать LocalDate
из java.time, современного Java-API даты и времени.
LocalDate // Represent a date-only value, without time-of-day, without time zone.
.of( y , m , d ) // Specify year-month-day, 1-12 for January-December.
.getDayOfWeek() // Extract a `DayOfWeek` enum object representing one of seven days of the week.
.getDisplayName( // Automatically localize the text of the name of the day of the week.
TextStyle.SHORT , // Specify how long or abbreviated.
Locale.US // Locale determines the human language and cultural norms used in localizing.
)
Ссылка: Учебное пособие по Oracle: Дата и время с пояснениямикак пользоваться java.time
.