【问题标题】:Get the date of the start week of a given date c#获取给定日期c#的开始周的日期
【发布时间】:2018-08-20 10:02:41
【问题描述】:

我正在尝试从给定日期获取一周的开始时间。例如,如果我传入 2018 年 8 月 16 日的日期时间,我预计会返回 2018 年 8 月 13 日。我发现的一切都是为了找到本周的开始。

【问题讨论】:

标签: c# datetime


【解决方案1】:

我会这样做:

将日期从字符串解析为 DateTime 对象(如果需要)

加上星期的当前天* -1(变成负数)+ 1

string s = "2018-08-23 13:26";

DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

DateTime startOfWeek = dt.AddDays(((int)(dt.DayOfWeek) * -1) + 1);
Console.WriteLine(startOfWeek);

Here's a Fiddle


编辑:如果您对周日到下周一感到困扰, 然后将星期日更改为从当前日期删除 7 天,如下所示;

string s = "2018-08-17 13:26";

DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

bool isSunday = dt.DayOfWeek == 0;
var dayOfweek = isSunday == false ? (int)dt.DayOfWeek : 7;

DateTime startOfWeek = dt.AddDays(((int)(dayOfweek) * -1) + 1);
Console.WriteLine(startOfWeek);

【讨论】:

  • 如果你在 8 月 19 日运行它,它会返回 8 月 20 日。
  • 我将从星期一到星期五(工作日)传递日期。所以从周日返回下周一不会影响我。
【解决方案2】:

使用日期变量获取一周中的星期一和星期日。 可以轻松尝试使用日期变量。

DateTime date = new DateTime(2019, 12, 1);
int day = (int) date.DayOfWeek;
DateTime Monday = date.AddDays((-1) * (day == 0 ? 6 : day - 1));
DateTime Sunday = date.AddDays((1) * (day== 0 ? day : 7 - day)); ```

【讨论】:

  • 请添加一些解释以改进您的答案,以便其他人能够理解如何这样可以解决问题。
【解决方案3】:

这里有一个版本为您提供一周中的星期一(假设周从星期一开始,到星期日结束)

DateTime dt = DateTime.Now;
DateTime startOfWeek = dt.AddDays((((int)(dt.DayOfWeek) + 6) % 7) * -1);    
Console.WriteLine(startOfWeek);

【讨论】:

    【解决方案4】:

    超级简单! 您可以使用 DayOfWeek 来了解您必须返回多远。 更多信息Is avaliable here

    星期日是 0,星期一是 1。

    DateTime date = DateTime.Now; //gets current time
    int day = date.DayOfWeek; //gets current day
    DateTime Sunday = date.AddDays( (-1) * day ); //go back all the days to get to Sunday
    DateTime Monday = date.AddDays( (-1) * (day - 1) ); //go back all the days - 1 to get to Monday
    

    正如评论所指出的,如果当天是星期天,这将不起作用...... 所以周一的解决方法是:

    DateTime Monday = date.AddDays( (-1) * (day == 0 ? 7 : day - 1) ); //go back all the days - 1 to get to Monday
    

    【讨论】:

    • @mjwills 上周一,我们在那里“添加”一个负数,因此我们要回到时间轴上。
    • 是的......当天是星期天的边缘情况使我的方法增加 1 天而不是减去 6。没有什么是简单的 day == 0 ? 7 : day 解决不了的:D
    • 感谢您的指出!我想我应该花一分钟以上的时间来考虑回复:D
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多