我有一个要求,我想根据今天的日期计算给定日期的最后一个日期。例如我有一个方法
DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
//Logic goes here
}
例如
- 如果我在 dayofWeek 中过了星期五,而今天是星期一,那么它应该返回我上星期五的日期。
- 如果我过了星期五,今天是星期五,那么应该返回同一日期。
条件:
- 我只想使用公式来计算日期。
- 不希望任何东西被假设或硬编码。
- 我不想使用 if...else。
您可以通过将一周中的当前日期与目标日期进行比较来计算要减去多少天,以防万一为负:
static DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
// Number of days to subtract, e.g. 1 for "today is Friday, we want Thursday"
// The ((...) + 7) % 7 part is to handle wrap-around for negative values.
int daysDifference = ((now.DayOfWeek - dayOfWeek) + 7) % 7;
return now.AddDays(-daysDifference);
}
或者使用Noda Time(我的日期/时间 API,它允许更清晰地表示“只是一个日期”等):
static LocalDate GetDate(LocalDate today, IsoDayOfWeek dayOfWeek)
{
return today.IsoDayOfWeek == dayOfWeek ? today : today.Previous(dayOfWeek);
}
行,
DateTime GetDate(DateTime now, DayOfWeek dayOfWeek)
{
var day = new TimeSpan(1, 0, 0, 0);
var result = now;
while(result.DayOfWeek != dayOfWeek)
{
result = result.Substract(day)
}
return result;
}
private static DateTime GetDate(DateTime todayDate, DayOfWeek dayofweek)
{
while (todayDate.DayOfWeek != dayofweek)
{
todayDate = todayDate.AddDays(-1);
}
return todayDate;
}