【问题标题】:How to retrieve start date and end date with correct time for current week in C#?如何在 C# 中检索当前星期正确时间的开始日期和结束日期?
【发布时间】:2018-06-03 09:41:05
【问题描述】:

在将此问题标记为重复之前,请进一步阅读。我知道这个问题被问了很多次,但我在一般的提问形式上还有一个补充,我还没有找到关于我的用例的正确答案。

我在周一和周五之间的随机时间有几个DateTime-objects(没有周六或周日(!))。

例如:

2017-11-06 11:30:00.0000000 // Monday 6th November 2017
2017-11-07 13:30:00.0000000 // Tuesday 7th November 2017
2017-11-08 13:00:00.0000000 // Wednesday 8th November 2017
2017-11-09 15:00:00.0000000 // Thursday 9th November 2017
2017-11-10 16:00:00.0000000 // Friday 10th November 2017

我想达到本周星期一和星期五的DateTime23:59/00:00

问题##

所以对于上面提到的所有DateTime-objects,我想在开始时间实现星期一和星期五:

2017-11-06 00:00:00.0000000 // Start: Monday 6th November 2017
2017-11-10 23:59:00.0000000 // Start: Friday 10th November 2017

解决这个问题最有效的方法是什么?

【问题讨论】:

    标签: c# datetime


    【解决方案1】:
    private DateTime GetDay(DayOfWeek dayName, DateTime dt)
    {
        if (dt.DayOfWeek == dayName)
                return dt;
            while (dt.DayOfWeek != dayName)
            {
                if (dayName == DayOfWeek.Monday)
                    dt = dt.AddDays(-1);
                else
                    dt = dt.AddDays(1);
            }
            return dt;
    }
    

    GetDay(DayOfWeek.Monday, Convert.ToDateTime("2017-11-06 11:30:00.0000000"));

    应该会在该周的星期一为您服务。

    GetDay(DayOfWeek.Friday, Convert.ToDateTime("2017-11-06 11:30:00.0000000"));

    应该是那周的星期五。

    一旦获得星期一和星期五的日期,就可以适当地更改返回的 DateTime 对象的时间部分。

    【讨论】:

    • 与其他答案相比,代码更少,这很有帮助;)
    • GetDay(DayOfWeek.Friday, Convert.ToDateTime("2017-11-06 11:30:00.0000000")) 返回错误的日期 11/3/17 12:00:00 AM 而不是 2017/11/10
    • 编辑了答案
    • 感谢编辑。标记为正确答案,点赞。
    【解决方案2】:

    正如 Dirk Schmidt 回答的那样: Get date of first and last day of the week knowing week number

    public static DateTime FirstDayOfWeek(DateTime date)
    {
        DayOfWeek firstDayOfWeek= CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
        int offset = firstDayOfWeek - date.DayOfWeek;
    
        return date.AddDays(offset);
    }
    
    public static DateTime LastDayOfWeek(DateTime date)
    {
        return FirstDayOfWeek(date).AddDays(4);
    }
    

    【讨论】:

    • 在一周的第一天是星期日的文化中,这是错误的。
    • firstDayOfWeek 变量中有什么内容?
    猜你喜欢
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2016-05-15
    相关资源
    最近更新 更多