semanas semana partir obtener numero mes las fechas fecha entre convertir contar como calcular c# wpf date calendar week-number

c# - partir - ¿Cómo puedo determinar el número de semana de una determinada fecha?



obtener fecha a partir de numero de semana excel (2)

Estoy tratando de hacer un calendario usando wpf. Al usar itemsPanel y más, tengo una cuadrícula con 7 columnas (domingo-sábado) y 6 filas (semana # del mes). Si puedo encontrar la posición de inicio del primero de cada mes obteniendo el número del día de la semana y de la semana (del mes), ¿cómo puedo encontrar el número de la semana (0-5 de cada mes)? Además, ¿no puedo de alguna manera simplemente completar el calendario a partir de ahí? Estoy perdido y no sé qué más probar.

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


Debe usar Calendar.GetDayOfWeek y Calendar.GetWeekOfYear antes que escribir usted mismo.

Puede garantizar que si escribe usted mismo un código de manejo de fecha / hora, contendrá fallas y no funcionará en lugares diferentes.

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

junto con el DataGrid obligatorio en el XAML:

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


Puede usar Calendar.GetWeekOfYear from Globalization para hacer esto.

Aquí están los documentos de MSDN para él: http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx

Debería pasar las propiedades de cultivo apropiadas de CultureInfo.CurrentCulture a GetWeekOfYear para que coincida con la cultura actual correctamente.

Ejemplo:

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

Puede modificar esto fácilmente en un método de extensión en DateTime :

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