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

Dav*_*Dev 16 c# datetime

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

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

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

我这样做会是一样的:

yearOldPrice = _priceService.GetPriceForDate(price.Date.AddYears(-1));
Run Code Online (Sandbox Code Playgroud)

yearOldPrice = _priceService.GetPriceForDate(price.Date.AddDays(-7 * 52));
Run Code Online (Sandbox Code Playgroud)

我问这个假设.AddDays(-7 * 52)是一样的.AddWeeks(-52),因为一周有7天.

Ste*_*gan 27

正如你在问题中所提到的,与年和月不同,每周总共有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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来像我的一样!(之后编辑) (2认同)

Jam*_*son 5

抽象Calendar实现了您所使用的方法,您可以使用区域设置的日历,也可以创建实现它的类的对象:

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

GregorianCalendar gc = new GregorianCalendar();
DateTime dt = gc.AddWeeks(datetime, weeks);
Run Code Online (Sandbox Code Playgroud)