c# - 如何确定某个日期的周数?

标签 c# wpf date calendar week-number

我正在尝试使用 wpf 制作日历。通过使用 itemsPanel 等,我有一个包含 7 列(星期日至星期六)和 6 行(星期几)的网格。如果我可以通过获取工作日和周数(每月)找到每个月第一天的起始位置,我如何找到周数(每个月的 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;
    }

最佳答案

您必须使用 Calendar.GetDayOfWeekCalendar.GetWeekOfYear而不是自己写。

您可以保证,如果您自己编写任何日期/时间处理代码,它将包含错误并且不会在不同的语言环境中工作。

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

连同 XAML 中的强制性 DataGrid:

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

关于c# - 如何确定某个日期的周数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7918593/

相关文章:

c# - 如何在 WPF textBlock 控件中滚动文本?

c# - 从 ContentControl 中的按钮触发命令?

javascript - Flot 显示来自 unix 的错误日期

php - 将 ISO 8601 转换为 unix 时间戳

JavaScript indexOf() 函数在 VB.Net 中失败

c# - 如何从 RGB 颜色创建 WPF 图像?

c# - 在 Linq 中使用匿名类型分组

c# - NPOI - 从模板创建新 Excel 时条件格式不起作用

c# - 想要在 GridView 中绑定(bind)对象内的对象。这可能吗?

c# - 在文本匹配 MVVM 上更改 TextBox BorderBrush 的颜色