DateTime值创建单独的类函数

时间:2016-03-09 09:49:59

标签: c# asp.net class

我的所有课程功能都有以下内容:

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个函数类,所以我会在那里吗?

4 个答案:

答案 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; }}