Как сделать расчет с помощью DateTime.Now()

этот вопрос может показаться простым для некоторых, но он полностью озадачил меня - я немного новичок на С#.

Настройка:

Попытка выполнить вычисление с помощью функции 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 ответов

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/ан-нас/library/ch92fbc1 (v = vs.110).aspx


В вашем коде есть несколько ошибок. DateTime.Now - свойство, поэтому удалите круглые скобки. Ваш CurrentAlarmTime имеет тип "строка", поэтому вам нужно сначала преобразовать его в 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);


Похоже, что ваш CurrentAlarmTime является строкой - я предполагаю, что это текст, введенный пользователем. Чтобы выполнить математику даты по этому значению, вам нужно сначала превратить ее в DateTime, используя метод DateTime.Parse().

var parsedCurrentAlarmTime = DateTime.Parse(CurrentAlarmTime);


Ваш CurrentAlarmTime должен быть типом DateTime. DateTime имеет числа конструкторов и методы Parse, которые не должны быть проблемой.

Также DateTime.Now является свойством, избавиться от круглых скобок.

Я бы сделал что-то вроде этого:

(CurrentAlarmTime - DateTime.Now).Ticks

и используйте значение ticks для получения TimeSpan.


Похоже, ваш CurrentAlarmTime - это строка. Вы можете использовать DateTime.Parse, чтобы получить DateTime от него, тогда ваше вычитание должно работать (и привести к объекту TimeSpan).

Кроме того, DateTime.Now является свойством, а не методом. Вам не нужно (и не должно) писать() после него.


Вы должны использовать метод класса DateTime Subtract as:

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

licensed under cc by-sa 3.0 with attribution.