﻿# V6122\. The 'Y' \(week year\) pattern is used for date formatting\. Check whether the 'y' \(year\) pattern was intended instead\.

Анализатор обнаружил потенциальную ошибку, связанную с использованием спецификатора 'Y' в паттерне форматирования даты\. Возможно, предполагалось использовать спецификатор 'y'\.

Рассмотрим пример:

```cpp
Date date = new Date("2024/12/31"); 
String result = new SimpleDateFormat("dd-MM-YYYY").format(date); //31-12-2025
```

'Y' литерал в паттерне даты обозначает не текущий год, а год относительно текущей недели\. 

По стандарту ISO\-8601:

* День, с которого начинается неделя — понедельник\.
* Первая неделя в году обязана состоять минимум из четырёх дней этого года\. 

Рассмотрим фрагмент календаря на конец 2024 и начало 2025 года:

|ПН|ВТ|СР|ЧТ|ПТ|СБ|ВС|
|---|---|---|---|---|---|---|
|30|31|1|2|3|4|5|



Приведённая неделя будет считаться первой неделей 2025 года, поскольку соответствует условиям из вышеупомянутого стандарта\. Поэтому, используя литерал 'Y' вместо ожидаемого 2024 года, мы получаем 2025\. 

Ошибочным будет и обратный пример:

```cpp
Date date = new Date("2027/01/01");
String result =
  new SimpleDateFormat("dd-MM-YYYY").format(date); // 01-01-2026
```

Рассмотрим фрагмент календаря на конец 2026 и начало 2027 года:

|ПН|ВТ|СР|ЧТ|ПТ|СБ|ВС|
|---|---|---|---|---|---|---|
|28|29|30|31|1|2|3|



Обратите внимание: 1, 2 и 3 января будут относиться к последней неделе декабря\. Эта неделя условиям вышеупомянутого стандарта не соответствует\.

В случае, если вы желаете отобразить год без учёта недели года, необходимо использовать литерал 'y' в паттерне форматирования даты\.

Корректный пример:

```cpp
Date date = new Date("2027/01/01");
String result = new SimpleDateFormat("dd-MM-yyyy").format(date) // 01-01-2027
```