2

如何在 C# 中获取一年中最后一个星期日的日期?gregoriancalendar 课程会有帮助吗?

4

7 回答 7

8

我不知道是否有一种方法,但一种简单的方法是检查 12 月的最后 7 天,从第 31 天开始倒计时。

更新:实际上,如果星期几是这样编号的:

0 Sun, 1 Mon, ... 6 Sat

然后

lastSunday = 31 - DayOfWeek(31, 12, 2009) // pseudocode
于 2009-09-14T09:55:17.043 回答
7

不是最好的解决方案,但应该可以:

int year = 2009;
DateTime lastSunday = new DateTime(year, 12, 31);
while (lastSunday.DayOfWeek != DayOfWeek.Sunday)
{
    lastSunday = lastSunday.AddDays(-1);
}
于 2009-09-14T09:59:54.360 回答
5

DayOfWeek我认为您可以为此使用枚举的整数表示:

DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime lastSunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
于 2009-09-14T10:10:36.833 回答
3

由于星期天DayOfWeek的枚举从 0 开始,这应该有效:

    int Year = 2009;
    DateTime endOfYear = new DateTime(Year, 12, 31);
    DateTime sunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek); 
于 2009-09-14T10:14:42.790 回答
1

您可以了解 12 月 31 日是一周中的哪一天。然后(如果不是星期天)计算回来......

for (int y=2009; y<=2018; y++)
{
  DateTime dt = new DateTime(y, 12, 31); // last day of year
  dt = dt.AddDays(-(int)dt.DayOfweek); // sun == 0, so then no change
  Console.WriteLine(dt.ToString("dddd dd-MM-yyyy"));
}
于 2009-09-14T09:54:24.547 回答
0

抱歉,如果您在此处看到VB 版本,我没有 C#版本。我怀疑你将能够转换它。

于 2009-09-14T09:54:57.263 回答
0

这取决于... 你想要一年中的最后一天是星期天,还是一年中最后一周的星期日?根据您所在国家/地区确定周数的方式,一年中的最后一周可能会延长至下一年的六天。

如果你想要第一个,你可以从 12 月 31 日开始,然后再回去,直到找到一个星期天。

如果你想要第二个,你将不得不使用该System.Globalizartion.Calendar.GetWeekOfYear方法找出下一年的第一周从哪里开始,然后取前一天。

于 2009-09-14T10:05:31.960 回答