我想从给定的开始日期开始上一个星期六的日期。 例如:
Startdate =#9/28/2013#
那么我想从那个开始日起每隔一个星期六进行一次,那将是:
2014年的星期六是:2014年9月27日
它将始终每年更新,下一次是:
2015年的星期六是:2015年9月26日
然后又是:
2016年的星期六是:2016年9月24日
它像通常的日期一样运行,但开始不是1/1 / [年],而是[星期六的日期] / 9 /年... 我将接受vb或c#中的逻辑... 这是我在vb.net中的代码:
Dim DstartDate As Date
DstartDate =#9/28/2013#
tnextyear = DstartDate.AddYears(1)
tyear = tnextyear.Year
tmonth = tnextyear.Month
tdate = tnextyear.Day
tday = tnextyear.DayOfWeek.ToString()
Dim ttdate As Date
If (tday <> "Saturday") Then
ttdate = tnextyear.AddDays(-1)
tday = ttdate.DayOfWeek.ToString()
If tday <> "Saturday" Then
ttdate = tnextyear.AddDays(-2)
tday = ttdate.DayOfWeek.ToString()
End If
End If
tday = ttdate.DayOfWeek.ToString()
tyear += 1
lbltestYear.Text = tday & tyear
它没有执行if condidition ....标签显示之前的tday&#34;如果&#34; ...在该代码中我把条件减去日期,如果它不是& #34;星期六&#34 ;,因为每年的日期将减少一个星期六,每4年减少2 ...我没有按照每4年的条件,因为我只是看看如何该代码的输出......
提前致谢...并且抱歉之前,,,,
答案 0 :(得分:0)
假设你需要获得未来10年的日期
Dim Startdate As DateTime = #9/28/2013#
For i As Integer = 1 To 10
Dim d As DateTime = Startdate.AddYears(i)
Console.WriteLine(d.AddDays(-(d.DayOfWeek - DayOfWeek.Sunday) - 1))
Next
此代码适用于en-US文化(周从星期日开始)
P.S。
上述代码会在每年的同一天返回上周六。如果您需要获取本月的最后一个星期六,请使用
Dim Startdate As DateTime = #9/28/2013#
For i As Integer = 1 To 10
Dim d As DateTime = New DateTime(Startdate.Year + i, Startdate.Month + 1, 1).AddDays(-1)
Do While d.DayOfWeek <> DayOfWeek.Saturday
d = d.AddDays(-1)
Loop
Console.WriteLine(d)
Next
答案 1 :(得分:0)
这是一个C#解决方案......
public static void FindLastSaturday(int month, int startYear, int numberOfYears)
{
var dates = Enumerable.Range(startYear, numberOfYears)
.Select(q => FilterFunc(new DateTime(q, month, CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(q, month))));
foreach (DateTime lastSaturday in dates)
{
Console.WriteLine(lastSaturday.ToString("R"));
}
}
private static DateTime FilterFunc(DateTime arg)
{
if (arg.DayOfWeek == DayOfWeek.Saturday)
{
return arg;
}
return FilterFunc(arg.AddDays(-1));
}
它使用LINQ来投射一系列日期并将它们强制进入上周六。样本的输出看起来像这样......
Sat, 27 Sep 2014 00:00:00 GMT
Sat, 26 Sep 2015 00:00:00 GMT
Sat, 24 Sep 2016 00:00:00 GMT
Sat, 30 Sep 2017 00:00:00 GMT
Sat, 29 Sep 2018 00:00:00 GMT
请注意,LINQ给出了2017年的正确答案,其中星期六属于该月的最后一天。