Java calendar.month возвращает месяц воскресенья - PullRequest
0 голосов
/ 06 июня 2018

У меня есть база данных SQL с полем года и недели, и мне нужно получить данные за месяц.Когда я пытаюсь получить его, он дает мне месяц после окончания недели.Например с 2019.01.28-2019.02.01 недели я получаю номер месяца 2.

В чем проблема?

(плюс информация: я пробовал и с другими day_of_week тоже)

Вот код:

rs = stmt.executeQuery("SELECT * FROM " + sqlDatabase.beosztas() + " WHERE id = \'" + id + "\'");`
        ResultSetMetaData md = rs.getMetaData();
        while (rs.next()) {
            year = rs.getInt(2);
            week = rs.getInt(3);
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.WEEK_OF_YEAR, week);
            cal.set(Calendar.DAY_OF_WEEK, 1);
            if (count == 0) {
                month = cal.get(Calendar.MONTH) + 1;
            }
            count++;
        }

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

DAY_OF_WEEK 1 не означает первый день недели.

Как в javadoc для DAY_OF_WEEK сказано:

Номер поля для полученияи установите с указанием дня недели.Это поле принимает значения SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY и SATURDAY.

Константа SUNDAY имеет значение 1, поэтому DAY_OF_WEEK 1 означает воскресенье.

Чтобы указать первый день недели, вам нужно позвонить getFirstDayOfWeek():

Получает, чтопервый день недели есть;например, SUNDAY в США, MONDAY во Франции.

Итак:

int year = 2019;
int week = 5;

Calendar cal = Calendar.getInstance(Locale.US);
cal.clear();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, week);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
System.out.println(cal.getTime());

cal = Calendar.getInstance(Locale.FRANCE);
cal.clear();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, week);
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
System.out.println(cal.getTime());

Выход

Sun Jan 27 00:00:00 EST 2019
Mon Jan 28 00:00:00 EST 2019

В обоих случаях вы получаете январь.

Выходные данные за неделю 14

Sun Mar 31 00:00:00 EDT 2019
Mon Apr 01 00:00:00 EDT 2019

Здесь языковой стандарт имеет значение, для какого месяца вы получаете.

0 голосов
/ 06 июня 2018

Calendar.DAY_OF_WEEK начинается с воскресенья, а не понедельника.Так что в вашем случае это нормально, что он возвращает месяц воскресенья.Если вы хотите установить дату на понедельник, просто используйте:

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

Будьте осторожны при использовании Календаря.Calendar.MONTH - это индекс на основе 0, а Calendar.DAY_OF_WEEK - это индекс на основе 1.

Таким образом, вы должны использовать константы, определенные в Calendar, например Calendar.MONDAY или Calendar.JUNE, чтобы убедиться, что вы используете правильный месяц.или день без ошибок.

Для дружеского использования Календаря лучше использовать константы.Желая определить дату 2018-02-18:

Calendar cal = Calendar.getInstance();
cal.set(2018, 2, 18); // wrong. here the date will be 2018-03-18
cal.set(2018, Calendar.FEBRUARY, 18); // correct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...