В году может быть более 52 недель. Каждый год имеет 52 полных недели + 1 или +2 (високосный год) дополнительных дней. Они собираются на 53-й неделе.
Итак, для каждого года у вас есть хотя бы один дополнительный день. Два для високосных лет. Эти дополнительные дни считаются отдельными неделями?
Сколько недель действительно зависит от начального дня вашей недели. Давайте рассмотрим это на 2012 год.
Проверьте настройки текущей культуры, чтобы увидеть, что она использует в качестве первого дня недели.
Как вы видите, в результате получается нормально.
Возможно даже иметь 54-ю неделю. Случается каждые 28 лет, когда 1 января и 31 декабря рассматриваются как отдельные недели. Это тоже должен быть високосный год.
Например, 2000 год имел 54 недели. 1 января (сидел) был первый недельный день, а 31 декабря (солнце) был вторым недельным днем.
var d = new DateTime(2012, 12, 31);
CultureInfo cul = CultureInfo.CurrentCulture;
var firstDayWeek = cul.Calendar.GetWeekOfYear(
d,
CalendarWeekRule.FirstDay,
DayOfWeek.Monday);
int weekNum = cul.Calendar.GetWeekOfYear(
d,
CalendarWeekRule.FirstDay,
DayOfWeek.Monday);
int year = weekNum == 52 && d.Month == 1 ? d.Year - 1 : d.Year;
Console.WriteLine("Year: {0} Week: {1}", year, weekNum);
Распечатывает: Год: 2012 Неделя: 54
Измените CalendarWeekRule в приведенном выше примере на FirstFullWeek или FirstFourDayWeek, и вы вернетесь назад 53. Давайте сохраним начальный день в понедельник, так как мы имеем дело с Германией.
Итак, неделя 53 начинается в понедельник 2012-12- 31, длится один день, а затем останавливается.
53 - правильный ответ. Измените культуру на германию, если хотите попробовать.
CultureInfo cul = CultureInfo.GetCultureInfo("de-DE");
Сам Oracle не создает предупреждающих или информационных сообщений, только исключения для сообщений об ошибках. Однако у него есть некоторая информация, которую вы можете запросить в PL / SQL, например:
SQL% ROWCOUNT:
update emp
set sal = sal+1000
where depno = 10;
if sql%rowcount = 0 then
-- no rows got updated
...
курсор% NOTFOUND:
loop
fetch mycursor into myvar;
exit when mycursor%notfound;
end loop;