【问题标题】:Work out minutes difference between dates计算日期之间的分钟差
【发布时间】:2011-10-04 10:58:51
【问题描述】:

我有以下代码:

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

谁能帮我解决这个问题

谢谢。

【问题讨论】:

  • 我会验证输入的日期是你认为的。第二个代码块应该在这种情况下工作。你仍然想使用 TotalMinutes,因为像 1hr 1min 这样的东西会在分钟内返回“1”,这几乎肯定不是你想要的,但这不会是你在这里列出的问题。

标签: c# datetime time date timespan


【解决方案1】:

我尝试了一个扩展,它解决了几分钟以上,你可以改进它:

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

【讨论】:

    【解决方案2】:

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

    供参考

    TimeSpan.Minutes - "获取当前 TimeSpan 结构所表示的时间间隔的分钟部分。"

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

    【讨论】:

    • 总分钟数是1!谢谢你,这么简单的错误。
    • @Sandeep - 相信我,你并不孤单。我本周也犯了同样的错误!
    • @Sandeep 有趣,因为对于您描述的问题,TotalMinutes 和 Minutes 都应该返回 10 而不是 0。 (时间跨度为 10 分钟)
    • @kekekela 我也不知道为什么,可能某个地方还有另一个错误,但现在都已修复
    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2018-11-02
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多