Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# DateTime.AddYear、AddMonth、AddDay、AddHour、AddMinute和#x27;不加?_C#_Datetime - Fatal编程技术网

C# DateTime.AddYear、AddMonth、AddDay、AddHour、AddMinute和#x27;不加?

C# DateTime.AddYear、AddMonth、AddDay、AddHour、AddMinute和#x27;不加?,c#,datetime,C#,Datetime,我有以下代码: DateTime endTime = new DateTime(01, 01, 01, 00, 00, 00); endTime = endTime.AddYears(currentYear - 1); endTime = endTime.AddMonths(currentMonth - 1); endTime = endTime.AddDays(currentDay - 1); hourToWaitTo = Convert.ToInt32(txtboxHourToWaitT

我有以下代码:

DateTime endTime = new DateTime(01, 01, 01, 00, 00, 00);

endTime = endTime.AddYears(currentYear - 1);
endTime = endTime.AddMonths(currentMonth - 1);
endTime = endTime.AddDays(currentDay - 1);

hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);
minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);

endTime = endTime.AddHours(hourToWaitTo);
endTime = endTime.AddMinutes(minuteToWaitTo);
但它并没有给endTime添加任何内容

EDIT1:

我将currentYear、currentMonth和currentDay设置为:

int currentYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));  
int currentMonth = Convert.ToInt32(DateTime.Now.ToString("MM")); 
int currentDay = Convert.ToInt32(DateTime.Now.ToString("dd"));
hourToWaitTo和minuteToWaitTo由用户在文本框中设置

我希望用户设置计算机关机的时间(例如12:25),并且我还希望倒计时显示离关机还有多少小时:分钟:秒。我已经成功地完成了所有这些,但是我无法解决上面提到的结束时间问题

解决方案:

这个问题的解决方案非常简单:

DateTime endTime = new DateTime(currentYear, currentMonth, currentDay, hourToWaitTo, minuteToWaitTo, 0);
我之前尝试过这样做,但由于某种原因,我遇到了一个错误。要设置上述变量,我使用了:

int currentYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));  
int currentMonth = Convert.ToInt32(DateTime.Now.ToString("MM")); 
int currentDay = Convert.ToInt32(DateTime.Now.ToString("dd"));

谢谢大家的帮助

 new DateTime(year,month,day,hour,minute,0)

这并不是对您问题的直接回答-您发布的代码看起来不错,所以肯定还有其他原因-但我想知道您为什么不这样做:

hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);
minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);

DateTime endTime = new DateTime(currentYear, currentMonth, currentDay, hourToWaitTo, minuteToWaitTo, 0);

这样的代码应该废除:

int currentYear = Convert.ToInt32(DateTime.Now.ToString("yyyy"));  
int currentMonth = Convert.ToInt32(DateTime.Now.ToString("MM")); 
int currentDay = Convert.ToInt32(DateTime.Now.ToString("dd"));
您要检查系统时钟三次,取出部分值,序列化为字符串,解析该字符串,然后使用每个部分。很多工作都是白干的

您真正需要的是:

DateTime endTime = DateTime.Today.AddHours(hourToWaitTo)
                                 .AddMinutes(minuteToWaitTo);
你应该考虑一下和你一起工作的日期。当您使用构造函数构造日期时间时,您将得到
.Kind
Unspecified
,除非您明确告诉它您想要什么类型的日期。在您的场景中,使用本地日期更合适,您可以使用
DateTime.Today
DateTime.Now

还要注意,由于您向用户询问本地时间,但允许他们输入时间组件,因此该时间可能无效或不明确。这在夏令时转换期间发生。您可以使用
TimeZoneInfo.Local.IsInvalidTime()
TimeZoneInfo.Local.isambiguustime()
验证用户输入。在时间不明确的情况下,您需要询问用户“夏令时转换之前或之后?”或类似的问题


最后,如果用户与所讨论的计算机不在同一时区,那么您还有很多工作要做。您应该考虑使用<代码> DATEMEMPLOOS,并且您需要捕获关闭的预期偏移量或时区。另一种方法是将停机事件的时间转换为UTC时间。查看更多详细信息和最佳实践。

code,您在哪里设置currentYear、currentMonth等?我没有您想要的答案,但您到底想在这里做什么?为什么不使用您想要开始的值构造
endTime
DateTime endTime=新的日期时间(currentYear、currentMonth、currentDay、hourToWaitTo、minuteToWaitTo、0)
?编辑:像这样去掉年、月、日是很疯狂的。你可以说
DateTime now=DateTime.now然后,如果您需要例如年份,只需使用
now.year
等。如果你想知道“现在”的日期,但没有小时和分钟(即最近午夜的时间),你可以使用
DateTime。您的代码正在做框架已经做的大量工作:阅读
DateTime
DateTimePicker
上的参考资料。谢谢!我之前尝试过这样做,但由于某种原因,我遇到了一个错误。
DateTime endTime = DateTime.Today.AddHours(hourToWaitTo)
                                 .AddMinutes(minuteToWaitTo);