为什么没有DateTime.AddWeeks(),如何获得52周前的DateTime对象?

时间:2011-07-27 15:49:41

标签: c# datetime

System.DateTime对象具有AddYears(), AddMonths(), AddDays(), AddSeconds()等方法

我注意到没有AddWeeks()。这是为什么?

另外,我的要求是从52周前获得价格。我知道这相当于1年,但他们具体约52周。

我会这样做:

yearOldPrice = _priceService.GetPriceForDate(price.Date.AddYears(-1));

作为

yearOldPrice = _priceService.GetPriceForDate(price.Date.AddDays(-7 * 52));

我提出假设.AddDays(-7 * 52).AddWeeks(-52)相同,因为一周有7天。

8 个答案:

答案 0 :(得分:21)

正如你在问题中所提到的,与年和月不同,每周总共有7天(在我的日历上,无论如何),所以当你需要的时候,通过AddWeeks方法获得的收益很少。做的是.AddDays(周* 7)。虽然你有AddMinutes和AddHours时必须质疑逻辑!该死的他们和他们的不一致!

如果真的困扰你,你总是可以为.AddWeeks创建一个扩展方法:

public static class DateTimeExtensions
{
    public static DateTime AddWeeks(this DateTime dateTime, int numberOfWeeks)
    {
        return dateTime.AddDays(numberOfWeeks * 7);
    }
}

正如其他人所指出的,一年不是52周。

答案 1 :(得分:5)

抽象Calendarimplements the method you're after,您可以使用您的区域设置日历,也可以创建实现它的类的对象:

DateTime dt = CultureInfo.InvariantCulture.Calendar.AddWeeks(datetime, weeks);

GregorianCalendar gc = new GregorianCalendar();
DateTime dt = gc.AddWeeks(datetime, weeks);

答案 2 :(得分:2)

终极我希望AddWeeks纯粹是为了避免大量的方法。也许添加扩展方法:

public static DateTime AddWeeks(this DateTime from, int count) {
    return from.AddDays(7 * count);
}

答案 3 :(得分:1)

yearOldPrice = _priceService.GetPriceForDate(price.Date.AddDays(-7 * 52);就是你想要的。请注意,添加一年,并添加52周是不同的。

如果你真的想要,你可以制作一个extension method

public static class DateTimeExtensions
{
    public static DateTime AddWeeks(this DateTime DT, int Weeks)
    {
        return DT.AddDays(Weeks * 7);
    }
}

答案 4 :(得分:1)

稍有不同。扣除52周减去 364 天,而一年 365 (闰年为366)。

可能没有AddWeeks()因为AddDays(-7 * numWeeks)减去周数很容易。

答案 5 :(得分:0)

同样是因为周= 7天(.AddDays(-7 * 52)== .AddWeeks(-52))

但52 weeek不是一年(.AddDays(-7 * 52)!=。AddYears(-1))

答案 6 :(得分:0)

如果他们具体约52周,那么我会使用-7 * 52,因为一周总有7天。当存在额外的一天时,使用.AddYear将考虑闰年。

答案 7 :(得分:0)

我认为这是因为周数有多种定义,即

ISO周数(https://en.wikipedia.org/wiki/ISO_week_date)的定义与北美对周数和其他文化的定义不同。

为什么上述解释对我们的上下文很重要(为什么没有'AddWeeks()')

第一周的开始或52/53周的结束在不同的格式/文化中有所不同,因此如果我们越过该边界(即年初或年末)加入/减去,则需要额外的信息来确定确切的日期给定的周数(无论是遵循ISO还是本地文化格式,周一是星期一还是星期日等),这使得该功能变得复杂。我认为正是出于这个原因,他们把它留给我们来计算周数。

如果您真的想要添加几周,如果您不关心周#define那么是,史蒂夫摩根提出的上述解决方案是足够聪明的。