.Net 獲取當前周是第幾周


最近項目中需要獲取當前周是今年的第幾周,這東西聽起來不難,但是還挺有意思的。

在中國,一周是從周一開始算,周天結束,在國外就不是這樣了,是從周天到周六為一個周。

有很多種方式去實現在這個功能,下面介紹兩種:

一、使用CultureInfo

這種方式,只需要修改CultureInfo里面的參數就行了,美國是en-US,其他國家的自行替換就行。

需要注意的就是,在很多情況下,每年的最后一周是跨年的,一般會當成下一年的第一周來算,這個得需要按業務處理。

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;
        }

 

二、使用GregorianCalendar

這種也可以獲取不同地區的當前周所在的位置,只需要修改GregorianCalendarTypes就行,可以使用 GregorianCalendarTypes.Localized

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 命名空間下,使用起來還是比較方便的。

調用方式也很簡單,如下,因為業務需要,每年的最后一周是跨年的,需要當成下一年的第一周來算。

 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;
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM