【问题标题】:How do I output the date of all Mondays this year?如何输出今年所有星期一的日期?
【发布时间】:2018-02-28 16:27:59
【问题描述】:

我正在尝试输出今年所有星期一的日期,但我的 if 元素在我提供的条件下无法正常工作。

这是我的代码:

static void Main(string[] args)
{
    var dagEtt = new DateTime(DateTime.Now.Year, 1, 1);
    while (dagEtt <= DateTime.MaxValue)
    {
        if (dagEtt == DayOfWeek.Monday)
            Console.WriteLine(dagEtt);
        dagEtt = dagEtt.AddDays(1);
    }
}

【问题讨论】:

  • dagEtt.DayOfWeek==DayOfWeek.Monday
  • 获取今年的日期,难道你不应该在今年的某个时间开始并在DateTime.MaxValue 之前的某个时间停止,这是大约 8000 年后的未来吗?当你找到第一个星期一时,为什么不加 7 天而不是 1?
  • @Amy 这是面向未来的。

标签: c# date datetime while-loop dayofweek


【解决方案1】:

我稍微修改了你的代码

var start = new DateTime(DateTime.UtcNow.Year, 1, 1);
var end = start.AddYears(1);

while (start < end)
{
    if (start.DayOfWeek == DayOfWeek.Monday)
    {
        Console.WriteLine(start);
        start = start.AddDays(7);
    }
    else
    start = start.AddDays(1);
}

【讨论】:

  • 真的有可能从星期一开始的 7 天之后就不是星期一了吗?哇
  • @CamiloTerevinto 我知道这并不明显,我们将不得不忍受它:)
  • Start=start.AddDays (7+DayOfWeek.Monday-start.DayOfWeek)
【解决方案2】:

您可以使用% 运算符计算一年中的第一个星期一。这大大简化了您的循环。

static void Main(string[] args)
{
    int year = DateTime.Now.Year;
    DateTime startDate = FirstMonday(year);

    while (startDate.Year == year)
    {
        Console.WriteLine(startDate);
        startDate = startDate.AddDays(7);
    }
}

https://stackoverflow.com/a/5665161/3194005

public static DateTime FirstMonday(int year)
{
    var firstDay = new DateTime(year, 1, 1);

    return new DateTime(year, 1, (8 - (int)firstDay.DayOfWeek) % 7 + 1);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2023-01-19
    • 2016-10-05
    相关资源
    最近更新 更多