我的所有课程功能都有以下内容:
var getDay = 3;
//DateTime now = DateTime.Now;
DateTime now = DateTime.UtcNow.Date;
//DateTime now = new DateTime(2015, 11, 09);
//int dayOfWeek = (int)now.DayOfWeek;
DateTime startOfWeek6 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay);
DateTime endOfWeek6 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6);
DateTime startOfWeek5 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 7);
DateTime endOfWeek5 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 7);
DateTime startOfWeek4 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 14);
DateTime endOfWeek4 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 14);
DateTime startOfWeek3 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 21);
DateTime endOfWeek3 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 21);
DateTime startOfWeek2 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 28);
DateTime endOfWeek2 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 28);
DateTime startOfWeek1 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 35);
DateTime endOfWeek1 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 35);
不是粘贴每个类函数中的所有函数,而是可以创建1个函数类,所以我会在那里吗?
答案 0 :(得分:1)
引入一个班级来保存一周的日期:
public class Week
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
然后创建一个返回这些集合的方法,例如使用List<T>
:
public List<Week> GetWeeks()
{
var weeks = new List<Week>();
var week = new Week
{
Start = now.AddDays((-(int)now.DayOfWeek + 1) - getDay),
End = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6),
}
weeks.Add(week);
// add more weeks
return weeks;
}
您可能希望参数化此方法,以允许它创建任意的,非固定的周数。
答案 1 :(得分:0)
public DateTime GetStartOfWeek(DateTime now, int getDay, int n)
{
return now.AddDays((-(int)now.DayOfWeek + 1) - getDay - n*7);
}
public DateTime GetEndOfWeek(DateTime now, int getDay, int n)
{
return now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - n*7);
}
和使用后像
public List<Tuple<DateTime,DateTime>> GetStartsAndEndsOfWeeks(int numOfWeeks, int getDay, DateTime now)
{
var list = new List<Tuple<DateTime,DateTime>>();
for(int i = 0, i < numOfWeek, i++)
{
list.Add(new Tuple {
Item1 = GetStartOfWeek(now, getDay, i),
Item2 = GetEndOfWeek(now, getDay, i),
});
}
return list;
}
答案 2 :(得分:0)
喜欢这个吗?
public abstract class WeekAcrossClasses
{
public WeekAcrossClasses()
{
}
protected List<DateTime> ReturnWeek(int getDay)
{
List<DateTime> returnList = new List<DateTime>();
//DateTime now = DateTime.Now;
DateTime now = DateTime.UtcNow.Date;
//DateTime now = new DateTime(2015, 11, 09);
//int dayOfWeek = (int)now.DayOfWeek;
DateTime startOfWeek6 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay);
DateTime endOfWeek6 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6);
DateTime startOfWeek5 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 7);
DateTime endOfWeek5 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 7);
DateTime startOfWeek4 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 14);
DateTime endOfWeek4 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 14);
DateTime startOfWeek3 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 21);
DateTime endOfWeek3 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 21);
DateTime startOfWeek2 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 28);
DateTime endOfWeek2 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 28);
DateTime startOfWeek1 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - 35);
DateTime endOfWeek1 = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - 35);
returnList.Add(startOfWeek6); //index 0
returnList.Add(endOfWeek6); //index 1
returnList.Add(startOfWeek5); //index 2
returnList.Add(endOfWeek5); // ...
returnList.Add(startOfWeek4);
returnList.Add(endOfWeek4);
returnList.Add(startOfWeek3);
returnList.Add(endOfWeek3);
returnList.Add(startOfWeek2);
returnList.Add(endOfWeek2);
returnList.Add(startOfWeek1);
returnList.Add(endOfWeek1); //index 10
return returnList;
}
}
然后可以在其他类中使用此代码:
public class ArbClass : WeekAcrossClasses
{
ArbClass()
{
List<DateTime> x = ReturnWeek(5);
}
}
真的应该考虑尝试将呼叫缩小,因为有很多可重复的代码可以缩小。
答案 3 :(得分:-1)
protected List<Week> getList(int count, int getDay)
{
var list = new List<Week>();
DateTime now = DateTime.Now;
for (int n = 0; n < count; n++)
{
Week w = new Week();
w.Start = now.AddDays((-(int)now.DayOfWeek + 1) - getDay - n * 7);
w.End = now.AddDays((-(int)now.DayOfWeek + 1) - getDay + 6 - n * 7);
list.Add(w);
}
return list;
}
public class Week{ public DateTime Start { get; set; } public DateTime nd { get; set; }}