【问题标题】:Get Date List from weeknumber c#从 weeknumber c# 获取日期列表
【发布时间】:2012-03-21 09:19:08
【问题描述】:

我有一个从给定日期获取当前周数的函数

例如

GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
return cal.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

返回 DateTime.Now 的第 40 周。

所以我的问题是,也是我的问题,我需要在返回的一周内获取日期。我已经尝试了几件事,但都没有成功。

【问题讨论】:

  • 您的意思是,您希望从周数生成日期?
  • 你能发布你尝试过的事情吗?
  • 查询时需要这个吗?如果是这样,SQL 有它自己的功能。可能值得一看。

标签: c# winforms datetime


【解决方案1】:

你可以使用Time Period Library for .NET类:

Week week = new Week( new DateTime( 2012, 03, 21 ) );
Console.WriteLine( "week #: ", week.WeekOfYear );
Console.WriteLine( "week first day: ", week.FirstDayOfWeek );
Console.WriteLine( "week last day: ", week.LastDayOfWeek );

此外,Week 类支持 ISO 8601 周编号和自定义文化。

【讨论】:

    【解决方案2】:

    您可以使用此函数获取一周的第一个日期:

    public static DateTime FirstDateOfWeek(int year, int weekOfYear)
    {
        DateTime jan1 = new DateTime(year, 1, 1);
        int daysOffset = Convert.ToInt32(System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek) - Convert.ToInt32(jan1.DayOfWeek);
        DateTime firstWeekDay = jan1.AddDays(daysOffset);
        System.Globalization.CultureInfo curCulture = System.Globalization.CultureInfo.CurrentCulture;
        int firstWeek = curCulture.Calendar.GetWeekOfYear(jan1, curCulture.DateTimeFormat.CalendarWeekRule, curCulture.DateTimeFormat.FirstDayOfWeek);
        if (firstWeek <= 1) {
            weekOfYear -= 1;
        }
        return firstWeekDay.AddDays(weekOfYear * 7);
    }
    

    那么你可以通过以下方式获取本周的所有日期:

    var firstDate = FirstDateOfWeek(2012, 40);
    var allWeekDays = new List<DateTime>();
    allWeekDays.Add(firstDate);
    var currentDate = firstDate;
    for(int d = 1; d < 7; d++)
    {
        currentDate=currentDate.AddDays(1);
        allWeekDays.Add(currentDate);
    }
    

    或一行:

    var week = Enumerable.Range(0,7).Select(d => firstDate.AddDays(d)).ToList();
    

    【讨论】:

      【解决方案3】:

      您只需查看给定日期的工作日即可获得一周中的第一天和最后一天,然后查找星期一:

      DateTime firstDay = date.Date;
      while (firstDay.DayOfWeek != DayOfWeek.Monday) {
        firstDay = date.AddDays(-1);
      }
      DateTime lastDay = firstDay.AddDays(6);
      

      【讨论】:

        猜你喜欢
        • 2018-09-17
        • 1970-01-01
        • 2011-06-19
        • 2018-10-09
        • 2019-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多