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

时间:2014-09-23 11:05:20

标签: c# datetime

这个问题对某些人来说可能看起来很简单,但它让我的思绪完全陷入困境 - 我对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'.

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您的CurrentAlarmTime必须是DateTime的类型。 DateTime有一些构造函数和Parse方法,这应该不是问题。

同样DateTime.Now是一个属性,摆脱括号。

我会做这样的事情:

(CurrentAlarmTime - DateTime.Now).Ticks

并使用ticks值来获取TimeSpan。

答案 2 :(得分:0)

您的CurrentAlarmTime似乎是一个字符串 - 我认为这是用户输入的文字。要对此值执行日期数学,您需要先使用DateTime.Parse()方法将其转换为DateTime。

var parsedCurrentAlarmTime = DateTime.Parse(CurrentAlarmTime);

答案 3 :(得分:0)

看起来你的CurrentAlarmTime是一个字符串。您可以使用DateTime.Parse从中获取DateTime,然后您的减法应该起作用(并产生一个TimeSpan对象)。

此外,DateTime.Now是属性,而不是方法。你不需要(也不应该)在它之后写()。

答案 4 :(得分:0)

您的代码中存在一些错误。 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);

答案 5 :(得分:-1)

您应该使用DateTime类方法Subtract as:

var date2 = DateTime.Parse(DateTime.Now.ToShortDateString() + " 10:00");
System.TimeSpan diff1 = date2.Subtract(DateTime.Now);