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);