Я должен сказать, это - одна область, где Eclipse действительно слаб. А именно, импорт/экспорт предпочтений относится ко ВСЕМ предпочтениям. Нет никакого способа импортировать, говорят просто, что шрифты/цветовые настройки (как Вы может с Visual Studio), не пачкая мои предпочтения привязки клавиш.
кроме того, я попробовал несколько из этих предпочтительных файлов, на которые ссылаются выше, и они полностью повреждают мою установку Eclipse.
Он всегда должен оставаться неизменным WEEK_OF_MONTH
( http://java.sun.com/j2se/1.4.2/docs/api/java/util /Calendar.html#WEEK_OF_MONTH). Из документации:
При установке или получении Поля WEEK_OF_MONTH или WEEK_OF_YEAR, Календарь должен определять первую неделю месяца или года в качестве справки точка. Первая неделя месяца или год определяется как самые ранние семь дневной период, начинающийся getFirstDayOfWeek () и содержащий at минимум getMinimalDaysInFirstWeek () дней того месяца или года. Недели сочтены ..., -1, 0 предшествуют первой неделе; недели пронумерованы 2, 3, ... Обратите внимание, что нормализованная нумерация возвращаемый get () может быть другим. Например, конкретный Календарь подкласс может обозначать неделю до неделя 1 года как неделя n в прошлом году.
Из Javadoc :
Если есть какой-либо конфликт в значениях календарных полей, Calendar дает приоритеты календарным полям, которые были установлены позже. Ниже приведены комбинации полей календаря по умолчанию. Будет использоваться самая последняя комбинация, определенная самым последним установленным отдельным полем.
Для полей даты:
YEAR + MONTH + DAY_OF_MONTH
YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
YEAR + DAY_OF_YEAR
YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
Я интерпретирую это как означающее, что, учитывая, что вы устанавливаете день недели, он в конечном итоге будет объединен с неделей месяца или недели года для получения фактических даты и времени. .
следующая формула возвращает «текущий» день недели в диапазоне [0; 6]
(d + numberOfDaysInAWeek - firstDayOfWeek) % numberOfDaysInAWeek
или прибавляет 1, если вы хотите диапазон [1; 7]
(d + numberOfDaysInAWeek - firstDayOfWeek) % numberOfDaysInAWeek + 1
d
- это то, что Calendar.get (Calendar.DAY_OF_WEEK)
возвращает
, чтобы получить первый день недели, вычесть результат формулы из текущей даты. Следующий код выполняет это:
final int currentDayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 7 - cal.getFirstDayOfWeek()) % 7;
cal.add(Calendar.DAY_OF_YEAR, -currentDayOfWeek);
Вам также следует проверить, какой день в неделе является первым. Я также думал, что это всегда воскресенье, но это зависит от местных настроек, и в моем случае понедельник является первым днем недели. Установка воскресенья в качестве первого дня недели устранила мою проблему.