Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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# 星期一';s在两个日期之间每周的日期_C#_Datetime_Timestamp - Fatal编程技术网

C# 星期一';s在两个日期之间每周的日期

C# 星期一';s在两个日期之间每周的日期,c#,datetime,timestamp,C#,Datetime,Timestamp,如何在给定的开始日期和结束日期之间获得每周之后的星期一日期 比如说 开始日期:2018年12月28日 截止日期:2019年12月29日 所以以下日期应该在列表中 Monday : 3-12-2018 Monday : 14-01-2019 Monday : 28-01-2019 Monday : 11-02-2019 这是我的代码:我无法从范围中找到介于这两周之间的日期。如何识别从1周开始的日期 任何帮助都将被占用 DateTime startDate =

如何在给定的开始日期和结束日期之间获得每周之后的星期一日期

比如说

  • 开始日期:2018年12月28日
  • 截止日期:2019年12月29日
所以以下日期应该在列表中

Monday     : 3-12-2018
Monday     : 14-01-2019
Monday     : 28-01-2019
Monday     : 11-02-2019
这是我的代码:我无法从范围中找到介于这两周之间的日期。如何识别从1周开始的日期

任何帮助都将被占用

 DateTime startDate = LimitVmodel.StartDate;
 DateTime endDate = LimitVmodel.EndDate;

 TimeSpan diff = endDate - startDate;

 int days = diff.Days;

 for (long i = 0; i <= days; i++)
     // for (DateTime date = TIR.NetCore.PersianDateTime.ConvertShToM(LimitVmodel.StartDate); date <= TIR.NetCore.PersianDateTime.ConvertShToM(LimitVmodel.EndDate); date = date.AddDays((Double)Week))
 {
     DateTime date;
     date = startDate.AddDays(i);
     DateYear a = new DateYear();

     switch (LimitVmodel.Day)
     {
         case "Saturday":
              if (date.DayOfWeek == DayOfWeek.Saturday)
              {
                  allDates.Add(a);
              }
              break;

         case "Sunday":
              if (date.DayOfWeek == DayOfWeek.Sunday)
              {
                  allDates.Add(a);
              }
              break;

         case "Monday":
              if (date.DayOfWeek == DayOfWeek.Monday)
              {
                  allDates.Add(a);
              }
              break;
}
DateTime startDate=LimitVmodel.startDate;
DateTime endDate=LimitVmodel.endDate;
TimeSpan diff=结束日期-开始日期;
整数天=差异天;
对于(长i=0;i
DateTime日期=LimitVmodel.StartDate;
开关(LimitVmodel){
案件“星期一”:
while(date.DayOfWeek!=DayOfWeek.Monday){
日期=日期。添加天数(1);
}
打破
案件“星期二”:
while(date.DayOfWeek!=DayOfWeek.周二){
日期=日期。添加天数(1);
}
打破
//等等。。。
}
所有日期。添加(日期);

while(DateTime.compare(date,LimitVmodel.EndDate)这里有一个扩展名为
的解决方案。
获取日期时间范围和一周中的一天

返回日期时间的列表

public static class DateUtils
{
    public static List<DateTime> GetWeekdayInRange(this DateTime from, DateTime to, DayOfWeek day)
    {
        const int daysInWeek = 7;
        var result = new List<DateTime>();
        var daysToAdd = ((int)day - (int)from.DayOfWeek + daysInWeek) % daysInWeek;
        
        do
        {
            from = from.AddDays(daysToAdd);
            result.Add(from);
            daysToAdd = daysInWeek;
        } while (from < to);

        return result;
    }
}
输出:

    {8/26/2019 12:00:00 AM}
    {9/2/2019 12:00:00 AM}
    {9/9/2019 12:00:00 AM}
    {9/16/2019 12:00:00 AM}
    {9/23/2019 12:00:00 AM}

您可以使用
for
循环检查您进入
LimitVmodel.day
的日期,并整理当天的所有日期。如下所示:

DateTime startDate = LimitVmodel.StartDate;
DateTime endDate = LimitVmodel.EndDate;

int days = (endDate - startDate).Days;

string myDay = LimitVmodel.Day;
var myDayDayOfWeek = (DayOfWeek)Enum.Parse(typeof(DayOfWeek),myDay); //convert string to DayOfWeek type

var allDates = new List<DateTime>();
for(int i=0; i < days; i++)
{
    var currDate = startDate.AddDays(i);
    if(currDate.DayOfWeek == myDayDayOfWeek)
        allDates.Add(currDate);
}
DateTime startDate=LimitVmodel.startDate;
DateTime endDate=LimitVmodel.endDate;
整数天=(结束日期-开始日期).days;
字符串myDay=LimitVmodel.Day;
var myDayDayOfWeek=(DayOfWeek)Enum.Parse(typeof(DayOfWeek),myDay);//将字符串转换为DayOfWeek类型
var allDates=新列表();
对于(int i=0;i
为什么你的结果不应该有1月9日、1月23日和2月7日?这些日期也是星期一。只需从开始日期开始,检查是否是星期一。如果不是增加1,请再次检查,直到找到一个星期一并打破循环-或者,你可以从你得到的星期一开始计算第一个星期一,但这不是真正的nee因为循环最多只能检查7个日期。在您找到第一个星期一后,只需开始一个新循环,增量为7天,直到您在结束日期之后才能找到所有其他的星期一。@EyIM您能分享所有代码吗?我在主程序中如何称呼它?@Zong我已经更新了使用代码。非常感谢@EyIM,您能hare如何从日期中删除该时间
2019年8月26日12:00:00 AM
我希望这样输出
2019年8月26日
@Zong-只需使用DateTime ToString成员函数。ToString(“M/d/yyyy”);为什么DateTime不出现?
    {8/26/2019 12:00:00 AM}
    {9/2/2019 12:00:00 AM}
    {9/9/2019 12:00:00 AM}
    {9/16/2019 12:00:00 AM}
    {9/23/2019 12:00:00 AM}
DateTime startDate = LimitVmodel.StartDate;
DateTime endDate = LimitVmodel.EndDate;

int days = (endDate - startDate).Days;

string myDay = LimitVmodel.Day;
var myDayDayOfWeek = (DayOfWeek)Enum.Parse(typeof(DayOfWeek),myDay); //convert string to DayOfWeek type

var allDates = new List<DateTime>();
for(int i=0; i < days; i++)
{
    var currDate = startDate.AddDays(i);
    if(currDate.DayOfWeek == myDayDayOfWeek)
        allDates.Add(currDate);
}