如何从c#中获取年份和周数的月份数?

正如标题所说,考虑到年份和周数,我如何获得月份数?

编辑:如果一周过了两个月,我想要一个星期的第一天所在的月份。

编辑(2):这是我获得周数的方式:

CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday); 

我只是想做相反的事情。

如果您假设您定义的周的第一天与一年的第一天相同,那么这将起作用:

 int year = 2000; int week = 9; int month = new DateTime(year, 1, 1).AddDays(7 * (week - 1)).Month; 

显然,一个真正的答案取决于你如何定义一周的第一天,以及你如何定义一周如何重叠多个月。

这就是我最终做的事情:

 static int GetMonth(int Year, int Week) { DateTime tDt = new DateTime(Year, 1, 1); tDt.AddDays((Week - 1) * 7); for (int i = 0; i <= 365; ++i) { int tWeek = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear( tDt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); if (tWeek == Week) return tDt.Month; tDt = tDt.AddDays(1); } return 0; } 

我会更喜欢更简单的东西,但它的工作原理:)

它不也取决于一周的哪一天?

你可能面临的另一个问题是,大多数年份不是从一周开始,这会改变一切。

这应该可以帮助

  public int getMonth(int weekNum, int year) { DateTime Current = new DateTime(year, 1, 1); System.DayOfWeek StartDOW = Current.DayOfWeek; int DayOfYear = (weekNum * 7) - 6; //1st day of the week if (StartDOW != System.DayOfWeek.Sunday) //means that last week of last year's month { Current = Current.AddDays(7 - (int)Current.DayOfWeek); } return Current.AddDays(DayOfYear).Month; } 

假设:

  1. 星期天是一周的第一天。
  2. 部分周仍计为第1周
  3. 输出开始和结束月份为整数数组。

     public int[] getMonth(int weekNum, int year) { DateTime StartYear = new DateTime(year, 1, 1); System.DayOfWeek StartDOW = StartYear.DayOfWeek; DateTime DayOfYearWeekStart = default(DateTime); DateTime DayOfYearWeekEnd = default(DateTime); int x = 0; if ((StartDOW == System.DayOfWeek.Sunday)) { DayOfYearWeekStart = StartYear.AddDays((weekNum - 1) * 7); DayOfYearWeekEnd = DayOfYearWeekStart.AddDays(6); } else { for (x = 0; x <= 7; x += 1) { if (StartYear.AddDays(x).DayOfWeek == DayOfWeek.Sunday) { break; // TODO: might not be correct. Was : Exit For } } if (weekNum == 1) { DayOfYearWeekStart = StartYear; DayOfYearWeekEnd = StartYear.AddDays(x - 1); } else if (weekNum > 1) { DayOfYearWeekStart = StartYear.AddDays(((weekNum - 2) * 7) + x); DayOfYearWeekEnd = DayOfYearWeekStart.AddDays(6); } } int[] Month = new int[2]; Month[0] = DayOfYearWeekStart.Month; Month[1] = DayOfYearWeekEnd.Month; return Month; } 

你不能。 您至少需要第一周开始的那一天(或一周开始时),以获得准确的答案。

你不能。 一周可以在一个月内开始,在另一个月结束。

我认为你假设“周”是连续7天的任何一组。 事实并非如此。 给定年份(2008年),第(5)周,您可以在1月或2月,具体取决于您的“周”开始时间。

 // Calculate the week number according to ISO 8601 public static int Iso8601WeekNumber(DateTime dt) { return CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(dt, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); } // ... DateTime dt = DateTime.Now; // Calculate the WeekOfMonth according to ISO 8601 int weekOfMonth = Iso8601WeekNumber(dt) - Iso8601WeekNumber(dt.AddDays(1 - dt.Day)) + 1;