代码之家  ›  专栏  ›  技术社区  ›  Oskar Kjellin

我怎样才能从一周开始约会,同时工作53周?C.*

  •  2
  • Oskar Kjellin  · 技术社区  · 16 年前

    我做了一个一年中每周休息的功能,这很好。问题是我需要一种方法来获得星期一的日期。这是瑞典日历。

    下面的代码适用于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 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    我认为你的基本问题是假设 DateTime d = new DateTime(year, 1, 1); 在一年的第一周,但可能属于上一年的第52/53周。

    你会找到解决办法的 here .

        2
  •  2
  •   Mikael Svenson    16 年前

    应该这样做:

    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;
    }
    
        3
  •  0
  •   Community Mohan Dere    9 年前

    你可能想看看下面的问题,我想这就是你要问的:

    Get date of first Monday of the week?

        4
  •  -1
  •   Subhash Yaduvanshi    11 年前
    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;
    
                }
    
    推荐文章