计算前几年的相应日历日

时间:2011-03-30 16:56:34

标签: c# sql vb.net date

我有一个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 个答案:

答案 0 :(得分:3)

我并不完全理解找到那一天的规则。但你可以沿着这些方向使用:

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相同,最接近最近的一天。