C# 计算从第周开始的月份

C# 计算从第周开始的月份,c#,asp.net,culture,C#,Asp.net,Culture,我从数据库中得到了第几周,需要计算它是本月的哪一周 例如: week no = 7 month = 2 week no 11 month = 3 怎么计算呢 再加上,我还有一个带有周号的年份值。假设您正在查找给定年份中的月份: var dtYearStart = new DateTime(DateTime.Now.Year, 1, 1); CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture; // Check for th

我从数据库中得到了第几周,需要计算它是本月的哪一周

例如:

week no = 7 month = 2

week no 11 month = 3
怎么计算呢


再加上,我还有一个带有周号的年份值。

假设您正在查找给定年份中的月份:

var dtYearStart = new DateTime(DateTime.Now.Year, 1, 1);
CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture;

// Check for the starting date of the initial week.
int diff = dtYearStart.DayOfWeek - defaultCultureInfo.DateTimeFormat.FirstDayOfWeek;
if (diff < 0)
{
 diff += 7;
}

dtYearStart = dtYearStart.AddDays(-1 * diff).Date;

int weekNo = 15;

DateTime dtWeekBased = dtYearStart.AddDays((weekNo-1) * 7);
string strMonth  = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dtWeekBased.Month);
var dtYearStart=newdatetime(DateTime.Now.Year,1,1);
CultureInfo defaultCultureInfo=CultureInfo.CurrentCulture;
//检查第一周的开始日期。
int diff=dtYearStart.DayOfWeek-defaultCultureInfo.DateTimeFormat.FirstDayOfWeek;
如果(差异<0)
{
diff+=7;
}
dtYearStart=dtYearStart.AddDays(-1*diff).Date;
int-weekNo=15;
DateTime dtweekbase=dtYearStart.AddDays((weekNo-1)*7);
字符串strMonth=CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dtweekbase.Month);

使用DateTime,您可以将周数乘以7,获得一年中经过的总天数,将这些天数添加到31/12/yyyy-1,并从生成的DateTime中获取月份

我希望这对你有用


再见。

从周数计算日期:

获取本月的工作周:


好的,我可以试一试,但不太好看:

public int MonthOfWeek( int week, int year, CalendarWeekRule, weekrule, DayOfWeek firstDayOfWeek)
{
  GregorianCalendar gc = new GregorianCalendar();
  for( DateTime dt = new DateTime(year, 1, 1); dt.Year == year; dt = dt.AddDays(1))
  {
    if( gc.GetWeekOfYear( dt, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday) == week ){
      return dt.Month;
    }
  }
  return -1;
}  
这将考虑生成周的特定于区域性的规则。如果一周分为两个月,它将返回它遇到的第一个月

所以在挪威,我会用CalendarWeekRule.FirstFourDayWeek和DayOfWeek.Monday来命名它,以获得正确的结果。

4周=1个月 所以使用

第%4周

它返回给您的月份编号

这里是一个使用以下方法的解决方案:



如果一周跨越两个月呢?但是如果一周在两个月之间呢?@yvind Knobloch Brå。你也需要知道年份。还有几种方法可以确定第一周是什么(4天或更多,第一个星期日,第一个完整工作周)@Marco如果一周在两个月之间,我只需要一个月属于周的开始日期,我想你应该添加
(weekNo-1)*7
,我错了吗?不管怎样,+1因为这是个好答案!:)不起作用-一年中的第一个日历周可能在前一年的12月开始。@Marco:我刚检查过,是的,应该是weekNo-1,谢谢。我已更新。您不确定第一周是否为一年中的前7天。这并不总是给出正确的结果。@Thortsten,如果一周是在前一年开始的,那么增加额外的周数将总是将该日期推到正确周指数的后续相对日期中。不起作用-一年的第一个日历周可能在前一年的12月开始。我理解,您必须设置为31/12/yyyy-1吗?抱歉弄错了,我会修改的now@Amedio-周的生成方式也取决于特定于区域性的设置。不幸的是,这并不总是能提供正确的结果。@Oyvind-那么我的解决方案只能在7周和365/366年的情况下正常工作?@Amedio-从31.12.yyyy减去一天有什么帮助?第1周的第一天(在挪威)可以是28.12.yyy-1到3.1.yyy之间的任意一天。这取决于新年从哪一天开始。4周!=1个月。4周=4*7天=28天。只有二月才有资格(至少在大多数年份)。但他只想要一周后的一个月,而不是一周后的几天。我猜你指的是第/4周(也是除法,不是模数)。还是不行。例如:第14周是4-10周。四月。然而,14/4=3.5表示三月。如果你认为1月是0,而不是1,那么第14周是正确的,因为3是4月,但是对于第51周,例如(12月19-25日),你会得到51/4=12.75,表明第51周属于一年中的第13个月。没什么道理。因为一个月不是4周,你不能简单地除以4得到正确的结果。
// ----------------------------------------------------------------------
public int GetMonthOfWeek( int weekOfYear )
{
  return new Week( weekOfYear ).FirstDayStart.Month;
} // GetMonthOfWeek