C# 获取一周中第一个星期一的日期?
我想知道你们是否知道如何根据今天的日期来计算星期一的日期 i、 e 2009-11-03通过,2009-11-02返回C# 获取一周中第一个星期一的日期?,c#,.net,C#,.net,我想知道你们是否知道如何根据今天的日期来计算星期一的日期 i、 e 2009-11-03通过,2009-11-02返回 /像这样的东西会有用的 DateTime dt = DateTime.Now; while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1); 我相信有一种更好的方法:)这是我使用的(可能不是国际化的): 试试这个: public DateTime FirstDayOfWeek(DateTime date) {
/像这样的东西会有用的
DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
我相信有一种更好的方法:)这是我使用的(可能不是国际化的):
试试这个:
public DateTime FirstDayOfWeek(DateTime date)
{
var candidateDate=date;
while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
candidateDate=candidateDate.AddDays(-1);
}
return candidateDate;
}
编辑以确保完整性:今天的日期过载:
public DateTime FirstDayOfCurrentWeek()
{
return FirstDayOfWeek(DateTime.Today);
}
Pondium的答案在某些情况下可以向前搜索。如果您只需要反向搜索,我认为应该是:
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
delta -= 7;
DateTime monday = input.AddDays(delta);
可能会在星期一给你回信。除非您使用的是星期一不是一周的第一天的文化氛围。那么:
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
为什么不使用本机解决方案
public static class DateTimeExtension
{
public static DateTime GetFirstDayOfWeek(this DateTime date)
{
var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
while (date.DayOfWeek != firstDayOfWeek)
{
date = date.AddDays(-1);
}
return date;
}
}
这里是国际。我认为作为扩展,它可能更有用。看看这个问题:是的,的确如此:不是国际化的。周一并不总是一周的第一天。您可以使用:CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek获取一周的第一天。实际上,在这种情况下,根据区域性,一周的第一天不感兴趣;OP想要一周的星期一,而不是一周的第一天。如果是一个星期天,它会在第二天返回,而不是6天前。(
DayOfWeek.Monday
是1
,input.DayOfWeek
是0
的一个周日。)道歉,不要把它当回事,我只是想为那些通过谷歌搜索“每周第一天”并获得此信息的人表达不同意见。(有趣的是,你把星期天作为英国的fdow,就像在en-GB
文化中一样,今天是星期一。)为什么要循环???,有很多方法不用循环就可以做到。请参阅下面的答案。这应该是正确的答案,因为它处理星期日,即星期一的第一天是星期一,因此如果星期日是输入日期,它应该返回之前的星期一。接受的答案不是。+1如果“输入”是2017年1月1日(星期日),则该代码将2016年12月26日作为一周的第一天!不是2017年2月1日(公认的答案是!)它也适用于2019年1月1日=2018年12月31日!var monday=DateTime.Now.AddDays(DayOfWeek.monday-DateTime.Now.DayOfWeek>0?(DayOfWeek.monday-DateTime.Now.DayOfWeek)-7:DayOfWeek.monday-DateTime.Now.DayOfWeek)日期;这是为我工作。也在周日或周一。这只是工作!感谢问题是获取具体日期(即2015-11-20),而不是将哪一天定义为第一天。
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
public static class DateTimeExtension
{
public static DateTime GetFirstDayOfWeek(this DateTime date)
{
var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
while (date.DayOfWeek != firstDayOfWeek)
{
date = date.AddDays(-1);
}
return date;
}
}