Как мне узнать дату недели, работая также с 53 неделями? C # - PullRequest
2 голосов
/ 29 марта 2010

Я сделал функцию для подсчета недель в году, и это прекрасно работает. Проблема в том, что мне нужен метод, чтобы получить дату недели. Это шведский календарь.

Приведенный ниже код хорошо работает для лет, в которых 52 недели, но в некоторых годах (например, в 2009 году) 53 недели. Затем я получил свидание с Януари в качестве понедельника (не могу быть правым). Поэтому, пожалуйста, помогите мне заставить его работать на протяжении всех лет.

Что я, вероятно, мог бы сделать, это проверить, есть ли в году 53 недели, а затем сделать некоторые проверки, но я бы хотел, чтобы все прошло гладко без специальных проверок.

Вот что я придумала:

    public static DateTime GetDateFromWeek(int year, int week)
    {
        //First day of the year
        DateTime d = new DateTime(year, 1, 1);
        GregorianCalendar calendar = new GregorianCalendar(GregorianCalendarTypes.MiddleEastFrench);
        d = calendar.AddWeeks(d, week);
        d = d.AddDays(1 - (double)d.DayOfWeek);
        return d;
    }

Ответы [ 4 ]

4 голосов
/ 29 марта 2010

Я думаю, что вашей основной проблемой является предположение, что DateTime d = new DateTime(year, 1, 1); находится на первой неделе года, но может относиться к неделе 52/53 предыдущего года.

Вы найдете решение здесь .

2 голосов
/ 29 марта 2010

Это должно сделать это:

public static DateTime GetDateFromWeek(int year, int week)
{
    GregorianCalendar calendar = new GregorianCalendar(GregorianCalendarTypes.MiddleEastFrench);
    DateTime d = new DateTime(year, 12, 31);
    int weeksInYear = calendar.GetWeekOfYear(d, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    int weeksToSubtract = weeksInYear - week;
    d = calendar.AddWeeks(d, -weeksToSubtract);
    d = d.AddDays(1 - (int)d.DayOfWeek);
    return d;
}
0 голосов
/ 29 апреля 2015
if (cmb_mode_of_service.SelectedItem.ToString() == "Weekly Service")
            {
                int year = 0;
                if (cmb_term_of_service.SelectedItem.ToString() == "One Year")
                {
                    year = 1;
                }

                if (cmb_term_of_service.SelectedItem.ToString() == "Two Year")
                {
                    year = 2;
                }

                if (cmb_term_of_service.SelectedItem.ToString() == "three year")
                {
                    year = 3;
                }

                DateTime currentdate = Convert.ToDateTime(service_start_date.Text);
                DateTime Enddate = currentdate.AddYears(+year);


                char c1 = 'A';
                int c2 = 1;
                for (var dt1 = currentdate; dt1 <= Enddate; dt1 = dt1.AddDays(7))
                {
                    DataRow dr = dt.NewRow();
                    dr["SN"] = c2++;
                    dr["serviceid"] = "S4-" + c1++;
                    dr["servicedate"] = dt1.ToString();
                    dr["servicestatus"] = "Pending";
                    dr["serviceexcutive"] = "Not Alowed";
                    dt.Rows.Add(dr);

                }
                dataGridView1.DataSource = dt;

            }
0 голосов
/ 29 марта 2010

Возможно, вы захотите взглянуть на следующий вопрос, я думаю, это то, что вы спрашиваете:

Получить дату первого понедельника недели?

...