0

我有以下代码:

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 添加任何内容

编辑1:

我像这样设置 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 问题。

解决方案:

这个问题的解决方法很简单:

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

感谢大家的帮助。

4

3 回答 3

1

这不是您问题的直接答案-您发布的代码看起来不错,所以肯定有其他事情发生-但我想知道为什么您不只是做类似的事情:

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

DateTime endTime = new DateTime(currentYear, currentMonth, currentDay, hourToWaitTo, minuteToWaitTo, 0);
于 2013-02-03T22:31:18.137 回答
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 时.KindUnspecified除非您明确告诉它您想要什么样的日期,否则您会得到一个。在您的场景中,使用本地日期更合适,您将使用DateTime.Todayor获得该日期DateTime.Now

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

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

于 2013-02-04T19:54:15.410 回答
0
 new DateTime(year,month,day,hour,minute,0)

?

于 2013-02-03T22:28:06.513 回答