2012-04-04 2 views

ответ

3

См Calendar.GetWeekOfYear

using System; 
using System.Globalization; 

public class Example 
{ 
    public static void Main() 
    { 
     DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; 
     DateTime date1 = new DateTime(2011, 1, 1); 
     Calendar cal = dfi.Calendar; 

     Console.WriteLine("{0:d}: Week {1} ({2})", date1, 
         cal.GetWeekOfYear(date1, dfi.CalendarWeekRule, 
              dfi.FirstDayOfWeek), 
         cal.ToString().Substring(cal.ToString().LastIndexOf(".") + 1));  
    } 
} 
// The example displays the following output: 
//  1/1/2011: Week 1 (GregorianCalendar) 
+1

Обратите внимание, что если вы хотите, чтобы недели, совместимые с ISO8601, это не совпало. Вам нужно использовать что-то вроде этого: http://blogs.msdn.com/b/shawnste/archive/2006/01/24/iso-8601-week-of-year-format-in-microsoft-net.aspx – porges

+0

Я благодарю вас, г-н Колин, он отлично выглядит, но я хочу получить текущую месячную неделю [текущую дату], вы можете мне помочь. В текущем месяце текущая дата неделя, неделя1 неделя2 ... неделя 5 нравится –

0

Если вам нужен текущая неделя «глобальный» номер, вы можете использовать это:

using System; 
using System.Globalization;  

DateTime date = DateTime.Now; 
int res = 0; 

// First day of year 
res = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek); 

// (Default) First four day week from Sunday 
res = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday); 

// First four day week from StartOfWeek 
res = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek); 

// First full week from Sunday 
res = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday); 

// First full week from StartOfWeek 
res = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek); 

Если вам нужен номер недели в месяце, используйте л как такой код:

DateTime beginningOfMonth = DateTime.Now; 

while (date.Date.AddDays(1).DayOfWeek != CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek) 
    date = date.AddDays(1); 

int result = (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays/7f) + 1; 
Смежные вопросы