web-dev-qa-db-ja.com

日付間の分差を計算する

私は次のコードを持っています:

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分先に設定されたとき。

誰かが私がこれを解決するのを手伝ってくれる?

ありがとう。

17
Sandeep Bansal

あなたが本当に欲しいのはspan.TotalMinutes(これがTimeSpanクラスで私を何回捕まえたかはわかりません!)

参考のため

TimeSpan.Minutes -"現在のTimeSpan構造で表される時間間隔の分コンポーネントを取得します。"

TimeSpan.TotalMinutes -"現在のTimeSpan構造の値を分単位および小数で表します。"

28
Jamiec

私はそれがあなたがそれを改善することができる数分以上解決する拡張を試みます:

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
0