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