【问题标题】:How do I build ISO Week Number DataTable programatically in C#?如何在 C# 中以编程方式构建 ISO 周数数据表?
【发布时间】:2012-01-04 08:55:32
【问题描述】:

有没有人知道如何建立一周的DataTable?

我听说有很多类型的计算,公历或等等...... 我的需求是 ISO 周号,绑定到数据表取决于周号。

DataTable 有 2 列:ISOWeekNo 和 WeekName

ISOWeekNo   WeekName
1           01 Jan 2012 To 07 Jan 2012
2           08 Jan 2012 To 14 Jan 2012

如何根据 ISO Week No 在 C# 中以编程方式构建?

【问题讨论】:

标签: c# datatable iso week-number


【解决方案1】:
// Set up DataTable
var dt = new DataTable();
var col1 = new DataColumn("ISOWeekNo", typeof(int));
var col2 = new DataColumn("WeekName", typeof(string));
dt.Columns.AddRange(new[] { col1, col2 });
dt.PrimaryKey = new[] { col1 };

// Start with the first day of this year and check each day until next year.
var day = new DateTime(DateTime.Now.Year, 1, 1);
while (day.Year == DateTime.Now.Year)
{
    var weekNum = DateTimeFormatInfo.InvariantInfo.Calendar.GetWeekOfYear(day, CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday);
    if (!dt.Rows.Contains(weekNum))
        dt.Rows.Add(weekNum, string.Format("{0} to {1}", day.ToString("dd' 'MMM' 'yyyy"), day.AddDays(6).ToString("dd' 'MMM' 'yyyy")));
    day = day.AddDays(1);
}

【讨论】:

  • 感谢您的代码...但第 52 周是 2012 年 1 月 1 日至 2012 年 1 月 7 日,不包括 2012 年 12 月 23 日至 2012 年 12 月 31 日之间的日期。
  • 您要求提供 ISO 周数。 2012/01/01 在 2011 年的第 52 周。2012 年的第 1 周从 2012/01/02 开始。您可以将CalendarWeekRule.FirstFullWeek 更改为CalendarWeekRule.FirstDay,但它不会是ISO。
  • 兄弟,我的意思是在 12 月你可以检查这一点。失去了一个星期。感谢您的支持
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 2011-09-24
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多