Расчет соответствующего календарного дня предыдущих лет - PullRequest
0 голосов
/ 30 марта 2011

У меня есть следующий зверь оператора SQL (DB2) ...

select ((date(days(date(cast(year('2012-03-28')-6 as char(4))|| '-01-01')) -(dayofweek(date(cast(year('2012-03-28')-6 as char(4))|| '-01-01') )-1))+7 days)+(((week('2012-03-28')-2)* 7)+dayofweek('2012-03-28')-1) days) AS CAL_COMP_DATE
from sysibm.sysdummy1

Принимая дату ввода среды, 2012-03-28, это вернется среда, 2006-03-29,Обратите внимание, что это соответствует четвергам.Соответствует соответствующему календарному дню предыдущих лет.

Есть ли более элегантный способ достижения той же цели в C # или VB.NET?Я пытался перевести этот запрос на VB.NET, но не смог сделать это идеально, и он выглядит просто ужасно и неприемлемо.

1 Ответ

3 голосов
/ 30 марта 2011

Я не совсем понимаю правило для нахождения этого дня.Но вы можете использовать что-то вроде этого:

var originalDate = new DateTime(2012,03,28);
var newDate = originalDate.AddYears(-6);
var daysToAdd = originalDate.DayOfWeek - newDate.DayOfWeek;
if(daysToAdd < -3)
    daysToAdd += 7;
if(daysToAdd > 3)
    daysToAdd -= 7;
newDate = newDate.AddDays(daysToAdd);

Это всегда округляет до ближайшего дня с тем же DayOfWeek.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...