最近項目中須要獲取當前周是今年的第幾周,這東西聽起來不難,可是還挺有意思的。spa
在中國,一週是從週一開始算,周天結束,在國外就不是這樣了,是從周天到週六爲一個周。code
有不少種方式去實如今這個功能,下面介紹兩種:orm
這種方式,只須要修改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; }
這種也能夠獲取不一樣地區的當前周所在的位置,只須要修改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; }