C# 如何正确地将天、小时和分钟添加到现有日期

C# 如何正确地将天、小时和分钟添加到现有日期,c#,C#,我试图将天、小时和分钟添加到现有的datetime中,但使用.addDays、.addHours和.addMinutes方法,datetime变量保持不变。我知道当我使用.addDays方法时,我必须为返回值分配一个新变量,即使这样也不会更改datetime变量 int serviceday = 0; int servicehour = 0; int serviceminute = 0;

我试图将天、小时和分钟添加到现有的datetime中,但使用.addDays、.addHours和.addMinutes方法,datetime变量保持不变。我知道当我使用.addDays方法时,我必须为返回值分配一个新变量,即使这样也不会更改datetime变量

  int serviceday = 0;
                        int servicehour = 0;
                        int serviceminute = 0;

                        if (ServiceDay == null || ServiceDay == "")
                        {
                            serviceday = 0;
                        }
                        else
                            Convert.ToInt32(ServiceDay);

                        if (ServiceHour == null || ServiceHour == "")
                        {
                            servicehour = 0;
                        }
                        else
                            Convert.ToInt32(ServiceHour);

                        if (ServiceMinute == null || ServiceMinute == "")
                        {
                            serviceminute = 0;
                        }
                        else
                            Convert.ToInt32(serviceminute);

看起来您想要添加任意数量的天、小时和分钟,但这是一个漫长的过程。您可以一次完成这一切:

                        DateTime servicedatetime = new DateTime();
                        servicedatetime = serviceEntry.ServiceDateTime;

                        DateTime newdatetimeDays = new DateTime();
                        DateTime newdatetimeHours = new DateTime();
                        DateTime newdatetimeMinutes = new DateTime();
                        newdatetimeDays = servicedatetime.AddDays(serviceday);
                        newdatetimeHours = newdatetimeDays.AddHours(servicehour);
                        newdatetimeMinutes = newdatetimeHours.AddMinutes(serviceminute);

您需要分配Convert.ToInt32调用的结果,否则不会设置变量,例如:

DateTime finalDateTime = serviceEntry.ServiceDateTime
    .AddDays(serviceday)
    .AddHours(servicehour)
    .AddMinutes(serviceminute);

您可以编写更紧凑的代码

serviceDay = Convert.ToInt32(ServiceDay)

注意:此答案大部分来自应获得积分的DavidG one,只是为了修复嘈杂的ifs块,以发现您是否具有有效值

这行代码没有任何作用:Convert.toint32servicemin;在我看来,一切都是零。您的操作正确,您确定返回的是newdatetimeMinutes而不是servicedatetime吗?此外,您不必为每次添加都实例化一个新的DateTime,您只需在AddDays、AddHours和Addminutes中始终使用newDateTimeDays即可。最后,你确定你实际上是在添加值,而不是0吗?@NicholasEllingson我意识到我的错误,我实际上不是在添加值,只是0。谢谢你。@LarsTech你是对的,我在发布问题后注意到了。对不起,各位,我犯了一个错误:servicedatetime。添加新的时间跨度serviceDay、serviceHour、serviceMinute、seconds:0;
int serviceday;
int servicehour;
int serviceminute;
Int32.TryParse(ServiceDay, out serviceday);
Int32.TryParse(ServiceHour, out servicehour);
Int32.TryParse(ServiceMinute, out serviceminute);
DateTime finalDateTime = serviceEntry.ServiceDateTime
                        .AddDays(serviceday)
                        .AddHours(servicehour)
                        .AddMinutes(serviceminute);