Member 13302374 Ответов: 3

C# - вычислить количество часов до крайнего срока


Привет,

Я попытался задать этот вопрос, и мне нужна небольшая помощь с последней частью. Я постоянно занимаюсь исследованиями, так как я новичок в этом деле, но помощь людей полезна.
Пожалуйста, посмотрите, что я сделал до сих пор ниже.

Проблема в том, что он говорит, что "вызов неоднозначен между следующими методами или свойствами:" математика.Round (double, int) ' и ' Math.Round(decimal, int)'.

Насколько мне известно, мне нужно преобразовать переменную в десятичную или двойную, а затем округлить ее до 2dp, но у меня возникли проблемы с тем, чтобы сделать это успешно (то есть я знаю, что хочу сделать, но что касается правильного кодирования без ошибок, то я пока не смог этого сделать).

С уважением.

Что я уже пробовал:

public static double HowManyHoursFromNow(DateTime deadline)
{
    var remaining = deadline.Subtract(DateTime.Now).Hours;

    return Math.Round(remaining, 2);
}

3 Ответов

Рейтинг:
28

Andy Lanng

Timespan имеет несколько свойств. Вы можете получить компоненты дней/часов и минут, но:

Часы никогда не будут превышать 23. это обрабатывается в свойстве Days. Он никогда не будет более точным, чем и int. это обрабатывается минутах собственность
Протокол никогда не будет превышать 59...

То, что вы ищете, - это TotalHours. Это может быть больше 23 и так же точно, как может быть двойник.


Member 13302374

Спасибо, сэр!

Member 13302374

Итак, скажем, например, у меня был такой вопрос: учитывая дату и время встречи, сколько дней это будет в будущем (в полных днях, например, в 11 вечера Сегодня вечером, встреча в 9 утра завтра-это 1 день).

Мой код был бы:
public static int HowManyDaysFromToday(назначение даты и времени)
{ответная встреча.TimeOfDay.Subtract(DateTime.Now.TimeOfDay).TotalDays;}

Правильно ли это?

Andy Lanng

Нет. Проблема здесь заключается в том, что временной интервал не имеет никакой ссылки на то, когда он начинается или заканчивается. между 11 вечера и 9 утра есть 10 часов. 10 часов-это единственная деталь, хранящаяся в промежутке времени. Это тот же самый объект, что и с 11 утра до 9 вечера того же дня

Вам нужно будет сравнить даты как часть уравнения. Для полного ответа мне нужно, чтобы вы опубликовали новый вопрос :S

Member 13302374

Я отправил новый вопрос :)

Andy Lanng

О, я что-то не понимаю ?
Можете ли вы разместить ссылку plz ^_^

Member 13302374

Они закрыли пост, потому что было недостаточно ясно. Позвольте мне попробовать обновить его сейчас, хотя он такой же, как и выше

Member 13302374

https://www.codeproject.com/Questions/1196326/Csharp-calculate-number-of-days-away-from-a-deadli

Member 13302374

Это мой последний вопрос, Энди. Спасибо

Рейтинг:
2

Richard MacCutchan

То DateTime.Subtract метод возвращает TimeSpan объект, а также Hours свойством этого является int. Так Math.Round с ним ничего нельзя сделать, так как у него нет дробной части; вы можете только округлить Decimal или Double введите, как описано в Математика.Круглый Метод (Система)[^].


Рейтинг:
2

TheRealSteveJudge

Вы должны использовать свойство TotalHours, которое представляет собой целые и дробные часы.

public static double HowManyHoursFromNow(DateTime deadline)
{
    var remaining = deadline.Subtract(DateTime.Now).TotalHours;

    return Math.Round(remaining, MidpointRounding.AwayFromZero);
}