Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个日期之间获得一个周期_C#_Datetime - Fatal编程技术网

C# 在两个日期之间获得一个周期

C# 在两个日期之间获得一个周期,c#,datetime,C#,Datetime,如何获取两个日期之间每周的日期和周数 比如说 开始日期:2019-10-01 截止日期:2020-02-01 因此,以下日期应该在列表中 [Week:40] 2019-10-01 ~ 2019-10-06 [Week:41] 2019-10-07 ~ 2019-10-13 [Week:42] 2019-10-14 ~ 2019-10-20 [Week:43] 2019-10-21 ~ 2019-10-27 [Week:44] 2019-10-28 ~ 2019-11-03 [Week:45]

如何获取两个日期之间每周的日期和周数

比如说

  • 开始日期:2019-10-01
  • 截止日期:2020-02-01
因此,以下日期应该在列表中

[Week:40] 2019-10-01 ~ 2019-10-06
[Week:41] 2019-10-07 ~ 2019-10-13
[Week:42] 2019-10-14 ~ 2019-10-20
[Week:43] 2019-10-21 ~ 2019-10-27
[Week:44] 2019-10-28 ~ 2019-11-03
[Week:45] 2019-11-04 ~ 2019-11-10
[Week:46] 2019-11-11 ~ 2019-11-17
[Week:47] 2019-11-18 ~ 2019-11-24
[Week:48] 2019-11-25 ~ 2019-12-01
[Week:49] 2019-12-02 ~ 2019-12-08
[Week:50] 2019-12-09 ~ 2019-12-15
[Week:51] 2019-12-16 ~ 2019-12-22
[Week:52] 2019-12-23 ~ 2019-12-29
[Week:53] 2019-12-30 ~ 2019-12-31
[Week:1] 2020-01-01 ~ 2020-01-05
[Week:2] 2020-01-06 ~ 2020-01-12
[Week:3] 2020-01-13 ~ 2020-01-19
[Week:4] 2020-01-20 ~ 2020-01-26
[Week:5] 2020-01-27 ~ 2020-02-01
这是我的代码:

var date = new DateTime(DateTime.Today.Year, 1, 1);
var startOfFirstWeek = date.AddDays(1 - (int)(date.DayOfWeek));
var weeks =
    Enumerable
      .Range(0, 54)
      .Select(i => new {
          weekStart = startOfFirstWeek.AddDays(i * 7)
       })
      .TakeWhile(x => x.weekStart.Year <= date.Year)
      .Select(x => new {
          x.weekStart,
          weekFinish = x.weekStart.AddDays(6)
       })
      .SkipWhile(x => x.weekFinish < date.AddDays(1))
      .Select((x, i) => new {
          x.weekStart,
          x.weekFinish,
          weekNum = i + 1
      });
var date=new DateTime(DateTime.Today.Year,1,1);
var startOfFirstWeek=date.AddDays(1-(int)(date.DayOfWeek));
风险周=
可枚举
.范围(0,54)
.选择(i=>new{
weekStart=StartFirstWeek.AddDays(i*7)
})
.TakeWhile(x=>x.weekStart.Year new{
x、 weekStart,
weekFinish=x.weekStart.AddDays(6)
})
.SkipWhile(x=>x.weekFinish新建{
x、 weekStart,
x、 周末结束,
周数=i+1
});

使用LINQ进行此操作相当复杂。循环可能更简单:

var st = new DateTime(2019, 7, 1);
var ed = new DateTime(2020,6,1);
var ey = new DateTime(st.Year,12,31);


while(st <= ed){
  var e = st.AddDays(6 - Math.Min((int)st.DayOfWeek,6));
  if(st.Year < e.Year)
    e = ey;
  if(e > ed)
e = ed;

  Console.Write($"[Week:{((st.DayOfYear-1)/7)+1}] {st:yyyy-MM-dd} ~ {e:yyyy-MM-dd}");

    st = e.AddDays(1);
}
var st=新日期时间(2019,7,1);
var ed=新日期时间(2020,6,1);
var ey=新日期时间(圣年,12,31);
while(圣德)
e=ed;
Console.Write($“[Week:{((st.DayOfYear-1)/7)+1}]{st:yyyy-MM-dd}{e:yyyy-MM-dd}”);
st=e.add天(1);
}
这里的逻辑是取开始日期并使用星期几来计算该周的结束日期。大多数情况下,这是开始日期后的6天,但第一次迭代可能会有所不同

然后我们检查年份是否发生变化,如果发生变化,则将结束日期与年终日期挂钩

然后我们检查是否超过了结束日期,如果超过了,则将其与结束日期挂钩

打印/添加/任何内容

然后,再次进入下周的开始日期,这也有助于循环控制

注意:年中的星期代码可能与日历有关,也可能有不同的解释-请参阅类似的内容,以了解如何计算公历,或者可能采用((DayOfYear-1)/7)+1的基本方法



我只是不确定你的逻辑是什么,将输出减少到4行,你是否打算给出一个例子,第2行是年底,以使年终治疗变得明显?

其他几周发生了什么?为什么输出中只有4行?那么,你想显示两个输入日期之间的周数、开始日期和结束日期吗?@Caius Jard,我只是举个例子,通常他会显示所有的dates@PavelAnikhouski,我更新了我的示例。我只是展示一个示例,通常他会显示所有日期。啊,对不起。。我忘了WeekOfYear不是一个东西,除非你为它写一个扩展方法。看见剩下的代码在给你列表的日期方面还行,只需添加一个最大的代码,根据你选择的日历调用一年中的一周(我不确定那是什么)