.Net 获取当前周是第几周

最近项目中须要获取当前周是今年的第几周,这东西听起来不难,可是还挺有意思的。spa

在中国,一周是从周一开始算,周天结束,在国外就不是这样了,是从周天到周六为一个周。code

有不少种方式去实如今这个功能,下面介绍两种:orm

1、使用CultureInfo

这种方式,只须要修改CultureInfo里面的参数就好了,美国是en-US,其余国家的自行替换就行。blog

须要注意的就是,在不少状况下,每一年的最后一周是跨年的,通常会当成下一年的第一周来算,这个得须要按业务处理。string

public static int GetWeekNumOfTheYear(DateTime date)
        {
            CultureInfo myCI = new CultureInfo("zh-CN");
            Calendar myCal = myCI.Calendar;
            CalendarWeekRule myCWR = myCI.DateTimeFormat.CalendarWeekRule;
            DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;
            int weekOfYear = myCal.GetWeekOfYear(date, myCWR, myFirstDOW);
            return weekOfYear;
        }

 

2、使用GregorianCalendar

这种也能够获取不一样地区的当前周所在的位置,只须要修改GregorianCalendarTypes就行,能够使用 GregorianCalendarTypes.Localizedio

public static int GetWeekNumOfTheYear1(DateTime date)
{
    //获取指定时间是当年的第几周
    GregorianCalendar gc = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
    int weekOfYear = gc.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
    return weekOfYear;
}

这两种方式都在System.Globalization 命名空间下,使用起来仍是比较方便的。ast

调用方式也很简单,以下,由于业务须要,每一年的最后一周是跨年的,须要当成下一年的第一周来算。class

 public static string GetCurrentWeekNum(DateTime dt)
 {
      string result = string.Empty;
      var dt1 = GetWeekFirstDay(dt);
      var dt2 = GetWeekLastDay(dt);
      //Whether or not to cross the year
      if (dt1.Year == dt2.Year)
      {
          result = string.Format("{0} W {1}", dt1.Year, GetWeekNumOfTheYear(dt).ToString("00"));
      }
      else
      {
          result = string.Format("{0} W 01", dt2.Year);
      }
      return result;
  }
相关文章
相关标签/搜索