如何使用DateTime.Now()进行计算
本文关键字:计算 何使用 DateTime Now | 更新日期: 2023-09-27 18:23:59
这个问题对一些人来说可能很简单,但它让我完全困惑了——我对C#有点新手。
设置:
尝试使用DateTime.Now()
为基于"报警"的应用程序进行计算。
问题:
我有一个label
,它显示当前时间。我有一个Masked Text box
,当用户设置警报时,它接受用户输入。
我正在尝试做一个计算,通过这个计算,我将添加另一个label
,显示一个人还有睡觉的时间。
从概念上讲,应该看起来像
TimeLeftToSleep(lbl) = CurrentAlarmTime-DateTime.Now()
尽管它一直给出一个错误,尝试解析,但我似乎无法让它工作——它产生的错误是一个很长的行:
Operator '-' cannot be applied to operands of type 'string' and 'System.DateTime'.
TextBox.Text
提供了一个字符串,您应该首先将其解析为DateTime
来对其进行任何计算。
DateTime result;
if (DateTime.TryParse(textbox1.Text, out result))
{
// the delta between two datetimes is a timespan.
TimeSpan delta = result - DateTime.Now;
// show the timespan within the label.
TimeLeftToSleep.Text = delta.ToString();
}
else
{
// the textbox doesn't contain a valid datetime.
}
有关TimeSpan的更多信息:http://msdn.microsoft.com/en-us/library/ee372286(v=vs.110).aspx这里是DateTime.TryParse方法:http://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx
CurrentAlarmTime必须是DateTime类型。DateTime有大量的构造函数和Parse方法,这应该不是问题。
DateTime.Now
也是一个属性,去掉括号。
我会这样做:
(CurrentAlarmTime - DateTime.Now).Ticks
并使用ticks值来获取TimeSpan。
您的CurrentAlarmTime
似乎是一个字符串——我认为这是用户输入的文本。为了对该值执行日期数学运算,您需要首先使用DateTime.Passe()方法将其转换为DateTime。
var parsedCurrentAlarmTime = DateTime.Parse(CurrentAlarmTime);
看起来CurrentAlarmTime是一个字符串。您可以使用DateTime.Parse从中获取DateTime,然后您的减法应该有效(并产生TimeSpan对象)。
另外,DateTime.Now是一个属性,而不是一个方法。你不需要(也不应该)在它后面写()。
您的代码中有一些错误。DateTime.Now是一个属性,因此请删除括号。CurrentAlarmTime的类型为"string",因此需要先将其转换为DateTime。
看看下面的例子(它不完整,也不太好,但应该让你知道你应该做什么):
已编辑,因为用户没有两个文本框。
int hour = 0;
int minute = 0;
try
{
hour = int.Parse(this.AlarmTextBox.Text.Split(':').First());
minute = int.Parse(this.AlarmTextBox.Text.Split(':').Last());
}
catch
{
}
var currentAlarmTime = DateTime.Today.AddHours(hour).AddMinutes(minute);
var timeLeftToSleep = currentAlarmTime - DateTime.Now;
this.timeLeftToSleepLabel.Text = string.Format("{0}:{1}", timeLeftToSleep.TotalHours, timeLeftToSleep.Minutes);
您应该使用DateTime类方法Subtract as:
var date2 = DateTime.Parse(DateTime.Now.ToShortDateString() + " 10:00");
System.TimeSpan diff1 = date2.Subtract(DateTime.Now);