Разработайте минутную разницу между датами

17

У меня есть следующий код:

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 минут вперед.

Может кто-нибудь помочь мне решить эту проблему?

Спасибо.

    
задан Sandeep Bansal 13.07.2011 в 14:19
источник
  • Я бы удостоверился, что введенное значение - это то, что вы думаете. Второй блок кода должен работать в этом случае. Вы все еще хотите использовать TotalMinutes, так как что-то вроде 1hr 1min вернет «1» за минуты, что почти наверняка не то, что вы хотите, но это не проблема, которую вы здесь изложили. –  heisenberg 13.07.2011 в 14:34

2 ответа

28

Я думаю, что вы действительно хотите, чтобы span.TotalMinutes (я не могу сказать, сколько раз это меня поймало в классе TimeSpan!)

Для справки

TimeSpan.Minutes - Получает минутный компонент временного интервала представленный текущей структурой TimeSpan. "

TimeSpan.TotalMinutes - Получает значение текущей структуры TimeSpan выраженные в целые и дробные минуты ».

    
ответ дан Jamiec 13.07.2011 в 14:22
  • Всего минут был один! Спасибо за это, такая простая ошибка. –  Sandeep Bansal 13.07.2011 в 14:29
  • @Sandeep - Поверьте, вы не одиноки. Я совершил ту же ошибку, что и на этой неделе! –  Jamiec 13.07.2011 в 14:30
  • @Sandeep Интересно, поскольку как TotalMinutes, так и Minutes должны возвращать 10, а не 0 для описанной проблемы. (TimeSpan 10 минут) –  heisenberg 13.07.2011 в 15:49
  • @kekekela Я понятия не имею, почему и то, возможно, была другая ошибка где-то, но теперь все исправлено –  Sandeep Bansal 13.07.2011 в 16:09
0

Я попробую расширение, которое он разрешил более чем на несколько минут, вы можете его улучшить:

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
    
ответ дан Ricardo Figueiredo 29.08.2016 в 19:54