如何使用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'.

如何使用DateTime.Now()进行计算

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