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天。
答案 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)
抽象Calendar
类implements 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那么是,史蒂夫摩根提出的上述解决方案是足够聪明的。