Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算前几年对应的日历日_C#_Sql_Vb.net_Date - Fatal编程技术网

C# 计算前几年对应的日历日

C# 计算前几年对应的日历日,c#,sql,vb.net,date,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

我有下面的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年3月28日星期三,返回日期为2006年3月29日星期三。请注意,它与星期四匹配。它与前几年的相应日历日相匹配


在C#或VB.NET中有没有更优雅的方法来实现相同的目标?我曾尝试将此查询翻译成VB.NET,但未能做到完美,它看起来很可怕,无法维护。

我不完全理解查找那天的规则。但你可以使用以下方法:

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);
var originalDate=新日期时间(2012,03,28);
var newDate=原始日期。添加年份(-6);
var daysToAdd=originalDate.DayOfWeek-newDate.DayOfWeek;
如果(天数加上<-3)
daysToAdd+=7;
如果(daysToAdd>3)
daysToAdd-=7;
newDate=newDate.AddDays(daysToAdd);

这总是在最近的一天和星期的同一天进行轮换。

我不完全理解找到那一天的规则。但你可以使用以下方法:

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);
var originalDate=新日期时间(2012,03,28);
var newDate=原始日期。添加年份(-6);
var daysToAdd=originalDate.DayOfWeek-newDate.DayOfWeek;
如果(天数加上<-3)
daysToAdd+=7;
如果(daysToAdd>3)
daysToAdd-=7;
newDate=newDate.AddDays(daysToAdd);

这总是以周的同一天取整到最近的一天。

-5
,但对输出应该是什么非常困惑。
-4
故意的,因为2012-03-28与2007-03-28的周的同一天,所以我无法真正测试减去天数的逻辑:-)到目前为止这似乎有效。。。我一直测试到2016年。闰年会有什么奇怪的“陷阱”吗?我不知道,因为我不知道你需要的真正逻辑。我建议你试试看。但我不这么认为,因为AddYears方法实际上只是将提供的值添加到日期的年份部分。之后,检查DayOfWeek,然后减去天数。减去天数就知道闰日,所以真的不应该有任何问题。@TaylorOtwell:如果我的答案对你有帮助,请投票并接受:)
-5
,但对输出应该是什么非常困惑。
-4
故意,因为2012-03-28和2007-03-28有相同的星期几,所以我无法真正测试我减去天数的逻辑:-)到目前为止这似乎有效。。。我一直测试到2016年。闰年会有什么奇怪的“陷阱”吗?我不知道,因为我不知道你需要的真正逻辑。我建议你试试看。但我不这么认为,因为AddYears方法实际上只是将提供的值添加到日期的年份部分。之后,检查DayOfWeek,然后减去天数。减去天数就知道闰日,所以真的不应该有任何问题。@TaylorOtwell:如果我的答案对你有帮助,请投票接受:)就像丹尼尔说的,你没有提供所有必要的逻辑。您想根据日历年的第n个星期三进行匹配吗?或者在最近的同一个工作日或其他一些规则?你可能会修改他提供的内容,以获得其中任何一个。就像丹尼尔说的,你没有提供所有必要的逻辑。您想根据日历年的第n个星期三进行匹配吗?或者在最近的同一个工作日或其他一些规则?你可能会修改他提供的内容,以获得其中任何一个。