计算日期之间的分钟差异

时间:2011-07-13 12:19:36

标签: c# datetime time date timespan

我有以下代码:

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;

但是,当值提前10分钟设置时,这给了我一个不正确的值0

任何人都可以帮我解决这个问题

感谢。

2 个答案:

答案 0 :(得分:28)

我认为你真正想要的是span.TotalMinutes(我无法告诉你有多少次这次让我在TimeSpan课堂上出现了!)

供参考

TimeSpan.Minutes - “获取当前TimeSpan结构所代表的时间间隔的分钟组件。”

TimeSpan.TotalMinutes - “获取以整数和小数分钟表示的当前TimeSpan结构的值。”

答案 1 :(得分: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