В разных библиотеках существует несколько действующих решений. Однако вам нужно знать, что использование стандартного календарного года «y» было бы неправильным. Вместо этого у вас должно быть использовать год недели (или названный год недели) с символом «Y» (заглавная буква).
Пример использования старых Calendar
-stuff:
java.sql.Date sqlDate = new java.sql.Date(2017 - 1900, 0, 1); // 2017-01-01
GregorianCalendar gcal = new GregorianCalendar();
gcal.setFirstDayOfWeek(Calendar.MONDAY);
gcal.setMinimalDaysInFirstWeek(4);
gcal.setTime(sqlDate);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-'W'ww");
System.out.println(sdf.format(gcal.getTime())); // 2016-W52
Пример использования Java-8:
java.sql.Date sqlDate = new java.sql.Date(2017 - 1900, 0, 1); // 2017-01-01
LocalDate ld = sqlDate.toLocalDate();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("YYYY-'W'ww", Locale.FRANCE);
System.out.println(dtf.format(ld)); // 2016-W52
примечание стороны: я здесь выбрал локаль Франции в обеспечить правильную конфигурацию недели, необходимую для ISO-8601.
примера с помощью моей библиотеки Time4J, которая только интересно и дает прибавочную стоимость, если вы планируете сделать некоторые арифметические действия с полученной календарной неделей (как plusWeeks(5)
или планируете получить субэлемент локализованного выхода):
java.sql.Date sqlDate = new java.sql.Date(2017 - 1900, 0, 1); // 2017-01-01
PlainDate value = JDBCAdapter.SQL_DATE.translate(sqlDate);
CalendarWeek cw =
CalendarWeek.of(
value.get(PlainDate.YEAR_OF_WEEKDATE),
value.get(Weekmodel.ISO.weekOfYear())
);
System.out.println(cw.toString()); // 2016-W52
Что именно представляет собой тип данных и содержание 'this.fieldName'? –
Это имя столбца. Скажем, «Время», имеющее тип данных «DATE» – Vishnukk
Разъяснения должны быть опубликованы как изменения в ваших Вопросах, а не как комментарии. –