Разработайте минутную разницу между датами
У меня есть следующий код:
DateTime pickerDate = Convert.ToDateTime(pickerWakeupDate.SelectedDate);
string enteredStr = pickerDate.ToShortDateString() + " " + textWakeupTime.Text;
string format = "dd/M/yyyy HH:mm";
DateTime enteredDate = DateTime.ParseExact(enteredStr, format, null);
Проблема, с которой я сталкиваюсь, заключается в том, что я хотел бы разделить разницу между установленной датой и датой и временем. Затем это значение должно предоставить мне значение количества минут между датами.
Я попытался использовать:
DateTime todaysDateTime = DateTime.Now;
TimeSpan span = enteredDate.Subtract(todaysDateTime);
int totalMins = span.Minutes;
Но это дало мне неправильное значение 0
, когда значение было установлено на 10 минут вперед.
Может кто-нибудь помочь мне решить эту проблему?
Спасибо.
Ответы
Ответ 1
Я думаю, что вы действительно хотите span.TotalMinutes
(я не могу сказать вам, сколько раз это меня поймало в классе TimeSpan!)
Для справки
TimeSpan.Minutes - Получает компонент минут временного интервала, представленного текущей структурой TimeSpan.
TimeSpan.TotalMinutes - Получает значение текущей структуры TimeSpan, выраженное в целых и дробных минутах."
Ответ 2
Я попробую расширение, которое он разрешил более чем на несколько минут, вы можете его улучшить:
public enum eTimeFragment
{
hours,
minutes,
seconds,
milliseconds
}
public static long DiferenceIn(this DateTime dtOrg, DateTime Diff, eTimeFragment etf = eTimeFragment.minutes)
{
long InTicks = 1;
switch (etf)
{
case eTimeFragment.hours:
InTicks = DateTime.MinValue.AddHours(1).Ticks;
break;
case eTimeFragment.seconds:
InTicks = DateTime.MinValue.AddSeconds(1).Ticks;
break;
case eTimeFragment.milliseconds:
InTicks = DateTime.MinValue.AddMilliseconds(1).Ticks;
break;
case eTimeFragment.minutes:
default:
InTicks = DateTime.MinValue.AddMinutes(1).Ticks;
break;
}
if (dtOrg > Diff)
return dtOrg.AddTicks(Diff.Ticks * -1).Ticks / InTicks;
else
return Diff.AddTicks(dtOrg.Ticks * -1).Ticks / InTicks;
}
Используя его, пример в консоли отладки:
DateTime fromDate = DateTime.Now;
//Default is Minutes fragment
fromDate.DiferenceIn(fromDate.AddHours(4))
240
fromDate.DiferenceIn(fromDate.AddHours(50))
3000
fromDate.DiferenceIn(fromDate.AddDays(1))
1440
fromDate.DiferenceIn(fromDate.AddDays(1),WGTS_Extensions.eTimeFragment.hours)
24
fromDate.DiferenceIn(fromDate.AddDays(1),WGTS_Extensions.eTimeFragment.seconds)
86400
fromDate.DiferenceIn(fromDate.AddHours(1),WGTS_Extensions.eTimeFragment.seconds)
3600