C# 在将特定日期从CET转换为IST并排除周末后,如何获得给定特定日期的目标日期

C# 在将特定日期从CET转换为IST并排除周末后,如何获得给定特定日期的目标日期,c#,datetime,C#,Datetime,我试图根据用户输入的特定日期获取未来的日期和时间。我需要将CET转换为IST,然后根据一些条件增加一些小时,它必须给我们一个未来日期,不包括周末和特定时间,例如,如果时间大于下午5点,则必须给下一个可用的日期 我有一个MVC表单,它接受一个日期,然后我必须将这个日期转换为C代码中的未来日期 有人能帮我吗 如果需要,我可以用伪代码给出逻辑 请帮我做这件事。因为我不知道如何在一个简单的WinForms应用程序上使用dateTimePicker和按钮触发事件: private void button4

我试图根据用户输入的特定日期获取未来的日期和时间。我需要将CET转换为IST,然后根据一些条件增加一些小时,它必须给我们一个未来日期,不包括周末和特定时间,例如,如果时间大于下午5点,则必须给下一个可用的日期

我有一个MVC表单,它接受一个日期,然后我必须将这个日期转换为C代码中的未来日期

有人能帮我吗

如果需要,我可以用伪代码给出逻辑


请帮我做这件事。因为我不知道如何在一个简单的WinForms应用程序上使用dateTimePicker和按钮触发事件:

private void button4_Click(object sender, EventArgs e)
{
    DateTime d = dateTimePicker1.Value;
    d = d.AddHours(3.5); // add 3.5 hours to move from CET to IST
    switch(d.DayOfWeek)
    {
        case DayOfWeek.Saturday:
            d = d.AddDays(2); // increment day to Monday
            break;
        case DayOfWeek.Sunday:
            d = d.AddDays(1); // increment day to Monday
            break;
    }
    MessageBox.Show(d.ToString("R")); // show value of d in machines regional format
}

希望这能给你一些想法

谢谢你的帮助。我使用了你的代码,并进一步使用了我自己的逻辑,并提出了最终的解决方案,它为我提供了预期的目标日期

以下是我的密码:-

DateTime d=Convert.ToDateTime(model.receiveddate)

DateTime end_time=newdatetime(1901,01,01,17,0,0);
TimeSpan timeFrom=TimeSpan.Parse(d.ToString(“HH:mm”);
TimeSpan timeTo=TimeSpan.Parse(end_time.ToString(“HH:mm”);
TimeSpan timediff=timeTo.Subtract(timeFrom);
if(model.Complexity==“L”)
{
如果(timediff.TotalHours>=4)
{
d=d.AddHours(4);
}
否则如果(timediff.TotalHours<4&&timediff.TotalHours>0)
{
d=d.AddHours(timediff.TotalHours+15+(4-timediff.TotalHours));
}
否则如果(时间差总小时数<0)
{
d=d.AddHours(timediff.TotalHours+15+4);
}
}
else if(model.Complexity==“M”)
{
如果(timediff.TotalHours>=9)
{
d=d.AddHours(9);
}
否则如果(timediff.TotalHours<9和timediff.TotalHours>0)
{
d=d.AddHours(timediff.TotalHours+15+(9-timediff.TotalHours));
}
否则如果(时间差总小时数<0)
{
d=d.AddHours(timediff.TotalHours+15+9);
}
}
else if(model.Complexity==“H”)
{
var日=d.ToString(“ddd”);
如果(日=“周一”)
{
d=d.AddHours(120);
}
否则,如果(日期=“星期二”|日期=“星期三”|日期=“星期四”)
{
d=d.AddHours(120+48);
}
否则如果(天==“星期五”&&timediff.TotalHours>0)
{
d=d.AddHours(120+48);
}
否则如果(天==“星期五”&&timediff.TotalHours<0)
{
d=d.AddHours(timediff.TotalHours+15+48+120);
}
}
开关(d.DayOfWeek)
{
星期六,星期六:
d=d.AddDays(2);//增加到星期一的天数
打破
星期日,星期日:
d=d.AddDays(1);//增加到星期一的天数
打破
}
d=d.AddHours(3.5);
model.TargetDate=d;//显示d的值

谢谢。但是我想把结果放在一个文本框中,我已经在使用MVC框架,所以不能使用Winform,那么我应该把代码放在控制器的什么地方?我需要将结果绑定到目标日期的文本框中。此外,我需要查看转换为IST后的时间,如果是在8到5之间,则根据条件添加4小时、9小时或45小时,并应给出日期,记住截止时间是下午5点,例如,如果我们将IST设置为下午1点,则如果我们必须添加4小时,则目标日期将是相同的,但如果我们必须添加9小时,则直到下午5点,则目标日期将是相同的第二天早上8点5个小时后,如果看不到您的代码,我真的说不出最好放在哪里。只要DateTime对象中有该值,代码就可以正常工作,您不需要使用MessageBox来显示它,只需调用如下内容:textBox1.text=d.ToString(“R”),或者类似于更新文本框值的内容。我有一个名为Received Date的文本框,我使用jquery日期时间选择器获取日期和时间。。根据这个文本框值,我需要根据上述条件转换并获取目标日期和时间。jQuery(document).ready(函数(){'use strict';jQuery('#txtreciveddate').datetimepicker();});在模型中,我将类设置为publicstringreceiveddate publicstringreceiveddate{get;set;},我可以添加小时数。但是我需要得到下午5:00的结束时间,然后从ist中减去,如果差值大于4小时,那么加上4小时,目标日期保持不变。但是如果差异小于4小时,则添加差异,然后添加小时,直到第二天早上8点,然后添加剩余的小时,这比添加的差异少4小时。因此,我想知道如何提取日期并将时间设置为结束时间,下午5点…似乎很复杂!!!!
                DateTime end_time = new DateTime(1901,01,01, 17, 0 ,0);

                TimeSpan timeFrom = TimeSpan.Parse(d.ToString("HH:mm"));
                TimeSpan timeTo = TimeSpan.Parse(end_time.ToString("HH:mm"));
                TimeSpan timediff = timeTo.Subtract(timeFrom);

                if (model.Complexity == "L")
                {
                    if (timediff.TotalHours >= 4)
                    {
                        d = d.AddHours(4);
                    }
                    else if (timediff.TotalHours < 4 && timediff.TotalHours > 0)
                    {
                        d = d.AddHours(timediff.TotalHours + 15 + (4 - timediff.TotalHours));
                    }
                    else if (timediff.TotalHours < 0)
                    {
                        d = d.AddHours(timediff.TotalHours + 15 + 4);
                    }
                }
                else if (model.Complexity == "M")
                {
                    if (timediff.TotalHours >= 9)
                    {
                        d = d.AddHours(9);
                    }
                    else if (timediff.TotalHours < 9 && timediff.TotalHours > 0)
                    {
                        d = d.AddHours(timediff.TotalHours + 15 + (9 - timediff.TotalHours));
                    }
                    else if (timediff.TotalHours < 0)
                    {
                        d = d.AddHours(timediff.TotalHours + 15 + 9);
                    }
                }
                else if (model.Complexity == "H")
                {
                    var day = d.ToString("ddd");
                    if (day == "Mon")
                    {
                        d = d.AddHours(120);
                    }
                    else if (day == "Tue" || day == "Wed" || day == "Thu")
                    {
                        d = d.AddHours(120 + 48);
                    }
                    else if (day == "Fri" && timediff.TotalHours > 0)
                    {
                        d = d.AddHours(120 + 48);
                    }
                    else if (day == "Fri" && timediff.TotalHours < 0)
                    {
                        d = d.AddHours(timediff.TotalHours + 15 + 48 + 120);
                    }
                }
                switch (d.DayOfWeek)
                {
                    case DayOfWeek.Saturday:
                        d = d.AddDays(2);// increment day to Monday
                        break;

                    case DayOfWeek.Sunday:
                        d = d.AddDays(1); // increment day to Monday
                        break;
                }
                d = d.AddHours(3.5);
                model.TargetDate = d; // show value of d