我有以下代码:
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)让计算机关机,我还想要一个倒计时来说明多少小时:分钟:几秒钟直到关机。我已设法完成所有这些,但我无法解决上面提到的endTime问题。
SOLUTION:
这个问题的解决方案非常简单:
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"));
和
int minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);
int hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);
谢谢大家的帮助。
答案 0 :(得分:1)
这不是你问题的直接答案 - 你发布的代码看起来还不错,所以肯定会有其他事情发生 - 但我想知道你为什么不做这样的事情:
hourToWaitTo = Convert.ToInt32(txtboxHourToWaitTo.Text);
minuteToWaitTo = Convert.ToInt32(txtboxMinuteToWaitTo.Text);
DateTime endTime = new DateTime(currentYear, currentMonth, currentDay, hourToWaitTo, minuteToWaitTo, 0);
答案 1 :(得分:1)
这样的代码应该被废除:
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);
您应该考虑与您合作的日期类型。当您使用构造函数构造DateTime时,除了明确告诉它需要什么样的日期之外,您将获得.Kind
Unspecified
。在您的方案中使用本地日期更合适,您可以使用DateTime.Today
或DateTime.Now
来获取本地日期。
另请注意,由于您要求用户使用本地时间,但允许他们输入时间组件,因此该时间可能无效或不明确。这种情况发生在夏令时转换期间。您可以使用TimeZoneInfo.Local.IsInvalidTime()
或TimeZoneInfo.Local.IsAmbiguousTime()
验证用户输入。如果时间不明确,您需要询问您的用户“在夏令时过渡之前或之后?”或类似的东西。
最后,如果用户与相关计算机不在同一时区,那么您还有很多工作要做。您应该考虑使用DateTimeOffset
代替,并且需要捕获关闭的预期偏移或时区。另一种方法是将时间转换为关闭事件的UTC时间。 Review this article了解更多详情和最佳做法。
答案 2 :(得分:0)
new DateTime(year,month,day,hour,minute,0)