C# 给定DayOfWeek编号,查找前一周中某一天的日期
这可能是令人尴尬的简单,但我有一个“不会做基础数学”的一天 我有一个系统,我们根据哪一天切断订单,因此,例如,周五下午4点之后,你不能为下一个周日下单,或者周二下午2点之后,你不能为第二天下单。知道我需要在5月4日星期日(截止日期)说“好”,然后让它告诉我5月2日星期五 所以我有下面的代码,它不能正常工作C# 给定DayOfWeek编号,查找前一周中某一天的日期,c#,datetime,C#,Datetime,这可能是令人尴尬的简单,但我有一个“不会做基础数学”的一天 我有一个系统,我们根据哪一天切断订单,因此,例如,周五下午4点之后,你不能为下一个周日下单,或者周二下午2点之后,你不能为第二天下单。知道我需要在5月4日星期日(截止日期)说“好”,然后让它告诉我5月2日星期五 所以我有下面的代码,它不能正常工作 int offset = (int)reqDate.DayOfWeek - thiscafeday.day_number; DateTime cutoffDateTime = reqDate
int offset = (int)reqDate.DayOfWeek - thiscafeday.day_number;
DateTime cutoffDateTime = reqDate.AddDays(-offset);
其中reqDate.DayOfWeek是星期日(0),而此Cafeday.day_编号是星期五(5)。我需要星期五的约会。如果截止日期是第二天,但星期日(即星期日0)似乎会把一切都搞糟,那么截止日期时间值是正确的。我似乎经常得到正确的一天,但下个星期,而不是前一个星期(我想我们是因为负偏移)
如果有人有一个简单的方法来获取过去一周内任意一天的日期,给定当前日期,我将非常感谢您的帮助
我也尝试了不同的版本
((7- (int)reqDate.DayOfWeek + thiscafeday.day_number) % 7)
但这也不能起作用
感谢您的帮助。您不必计算要抵消的天数,只需后退一步,直到到达您想要的位置
DateTime GetDay(DateTime startDate, DayOfWeek targetDay)
{
var date = startDate;
while (date.DayOfWeek != targetDay)
{
date = date.AddDays(-1);
}
return date;
}
如果还需要偏移量,可以减去之后的日期:
DateTime startDate = new DateTime(2014, 4, 27); // Sunday
DateTime friday = GetDay(startDate, DayOfWeek.Friday);
int diff = (startDate - friday).Days; // subtracting DateTimes gives a TimeSpan
Console.WriteLine(diff); // 2
您可以使用以下扩展方法:
public static class DateExtensions
{
public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek)
{
int start = (int)from.DayOfWeek;
int wanted = (int)dayOfWeek;
if (wanted <= start)
wanted += 7;
return from.AddDays(wanted - start);
}
public static DateTime Previous(this DateTime from, DayOfWeek dayOfWeek)
{
int end = (int)from.DayOfWeek;
int wanted = (int)dayOfWeek;
if (wanted >= end)
end += 7;
return from.AddDays(wanted - end);
}
}
var lastFriday = DateTime.Today.Previous(DayOfWeek.Friday);
公共静态类日期扩展
{
public static DateTime Next(此DateTime from,DayOfWeek DayOfWeek)
{
int start=(int)from.DayOfWeek;
int WARNED=(int)星期一;
如果(需要=结束)
end+=7;
从.AddDays返回(通缉-结束);
}
}
var lastFriday=DateTime.Today.Previous(DayOfWeek.Friday);
(可能需要针对您的特定场景进行一些调整)谢谢您的帮助,Tim,我已经研究了循环,虽然一定有一种“聪明而优雅”的方法来使用数字,但这次显然不是!你当然可以用数字来做。它最终是否会比一个循环更优雅、更清晰还不确定。