2011-10-27 10 views
12

wpf를 사용하여 캘린더를 만들려고합니다. itemsPanel 등을 사용하여 7 열 (일요일 - 토요일) 및 6 행 (주 # 월)의 그리드가 있습니다. 평일과 주 번호 (월)를 가져 와서 매월 1 일의 시작 위치를 찾을 수 있다면 주 번호 (매월 0-5)를 어떻게 찾을 수 있습니까? 또한 어떻게 든 캘린더를 그곳에서 채울 수 없습니까? 나는 길을 잃었고 나는 그 밖에 무엇을 시도해야할지 모른다.특정 날짜의 주 번호를 어떻게 확인할 수 있습니까?

public partial class SchedulePage : Page 
{   
    MainWindow _parentForm; 
    public int dayofweek; 

    public SchedulePage(MainWindow parentForm) 
    { 
     InitializeComponent(); 
     _parentForm = parentForm; 
     // DateTime date = new DateTime(year, month, day); 

     _parentForm.bindings = new BindingCamper();   
     _parentForm.bindings.schedule.Add(new Schedule { WeekNo = (int) getWeekNumber(), WeekDay = dayofweek }); 
     DataContext = _parentForm.bindings; 
     // lblTest.Content = dates(2011, 10, 27); 
    } 

    public double getWeekNumber() 
    { 
     dayofweek = getWeekDay(2011, 10, 31); 
     double h = dayofweek/7; 
     double g = Math.Floor(h); 
     return g; 
    } 

    public int getWeekDay(int year, int month, int day) 
    { 
     //year = 2011; 
     //month = 10; 
     //day = 27; 
     int[] t = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; 
     // year -= month < 3; 
     return (year + year/4 - year/100 + year/400 + t[month - 1] + day) % 7; 
    } 

답변

17

당신은 자신을 쓰기에 우선 Calendar.GetDayOfWeekCalendar.GetWeekOfYear를 사용해야합니다.

날짜/시간 처리 코드를 직접 작성하면 오류가 발생하고 다른 로케일에서는 작동하지 않는다는 것을 보증 할 수 있습니다. XAML에서 의무적 인 데이터 그리드와 함께

public class Row 
{ 
    public string MonthWeek { get; set; } 
    public string Year { get; set; } 
    public string Month { get; set; } 
    public string Day { get; set; } 
    public string WeekOfYear { get; set; } 
} 

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     var l = new List<Row>(); 
     DateTime startDate = DateTime.Now; 
     DateTime d = new DateTime(startDate.Year, startDate.Month, 1); 
     var cal = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar; 
     var ms = cal.GetWeekOfYear(new DateTime(d.Year, d.Month, 1), System.Globalization.CalendarWeekRule.FirstDay, System.DayOfWeek.Sunday); 
     for (var i = 1; d.Month == startDate.Month; d = d.AddDays(1)) 
     { 
      var si = new Row(); 
      var month_week = (d.Day/7) + 1; 
      si.MonthWeek = month_week.ToString(); 
      si.Month = d.Year.ToString(); 
      si.Year = d.Month.ToString(); 
      si.Day = d.Day.ToString(); 
      si.WeekOfYear = cal.GetWeekOfYear(d, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString(); 
      l.Add(si); 
     } 
     dataGrid1.ItemsSource = l; 
    } 
} 

:

<DataGrid AutoGenerateColumns="true" Name="dataGrid1" /> 
+0

이렇게하면 일주일에 1에서 53 사이의 날짜가 반환됩니다. b/c의 그리드에는 6 행의 grid.row 0-5가 있지만 그 정보를 어떻게 사용합니까? 무지를 유감으로 여기는 것은 나에게 모두 새로운 것이다. 다른 말로하면 coloumns는 주간 및 행이 주일에 무엇입니까? 그리드에 적용하는 방법을 모르며 모두 채우십시오. – TMan

+0

@TMan 나는이 작업을 수행하는 방법에 대한 작업 예제를 추가했습니다. –

+0

감사합니다. var ms와 i는 무엇을 위해 사용 되나요? – TMan

11

세계화의 Calendar.GetWeekOfYear을 사용하면이 작업을 수행 할 수 있습니다.

는 여기에 대한 MSDN의 문서를이다 : http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx

당신은 제대로 현재의 문화를 일치 그래서 GetWeekOfYearCultureInfo.CurrentCulture에서 적절한 문화 속성을 통과해야한다.

예 : 쉽게 DateTime에 확장 방법으로이 문제를 수정할 수

int GetWeekOfYear(DateTime date) 
{ 
    return Calendar.GetWeekOfYear(
     date, 
     CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule, 
     CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek 
    ); 
} 

:

static int GetWeekOfYear(this DateTime date) 
{ 
    return Calendar.GetWeekOfYear(
     date, 
     CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule, 
     CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek 
    ); 
} 
+0

한 -하지만 난 "을 사용한다"가 아니라 "를 사용할 수 있습니다"라고 말하고 싶지만 - 내 대답 –

+0

을 심판 나는에 당신을주의 것 당신이 그 방법에 얼마나 의존하는지 - 그것은 당신에게 모순 된 결과를 줄 것입니다. 예를 들어, 12 월 30 일은 일요일입니다. 첫 번째 요일로 WeekRule FirstDay 또는 FirstFourDayWeek 및 Sunday를 사용하여 해당 메서드를 호출하면 53을 반환합니다. 그러나 같은 주에 2013 년 1 월 1 일의 날짜로 해당 메서드를 호출하면 1을 얻으십시오. – AndrewS

+0

이렇게하면 1 - 53에있는 주를 반환 할 것입니다. b/c 내 그리드가 6 행 grid.row 0-5를 가지지 만 그 정보를 어떻게 사용합니까? 무지를 유감으로 여기는 것은 나에게 모두 새로운 것이다. – TMan