【问题标题】:Calculating how many minutes there are between two times计算两次之间有多少分钟
【发布时间】:2012-02-19 12:14:08
【问题描述】:

我的应用程序中有一个数据网格视图,其中包含开始和结束时间。我想计算这两次之间的分钟数。到目前为止,我得到了:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);

但最后一行无法编译,因为它说我在 Timespan 构造函数中使用了无效参数。我已经研究了很多关于如何计算两次之间的分钟数,但我遇到了一些难题。有人可以建议我实现目标的最佳方式。

编辑/

现在我的代码如下:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;

但我在第二行得到了无效的演员表。 varFinish 和 varValue 都是时间,例如10:00 和 8:00 说。所以不确定他们为什么不强制转换为 DateTime 类型?

【问题讨论】:

  • 如果 varFinish 是字符串,则不能将字符串强制转换为 DateTime。您需要使用 DateTime.Parse(...)。即使这样,如果 varFinish 中没有日期,它将暗示今天的日期。

标签: c#


【解决方案1】:

试试这个

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

编辑: 如果您尝试使用 'span.Minutes',这将仅返回时间跨度 [0~59] 的分钟数,要返回此间隔内所有分钟的总和,只需使用 'span.TotalMinutes'。

【讨论】:

  • 这是一个很好的答案,但是当两次之间的差异大于 1 小时(即 60 分钟或更多)时,在 span.Minutes 上给出 0
  • @MalikAsif。我刚刚尝试了 61 分钟的跨度,我得到了 1 小时 1 分钟,正如预期的那样。如果跨度正好是 60 分钟,那么是的,分钟数为零。你在想TotalMinutes()吗?
  • 不是真的。 span.Minutes 返回一个数字 [0..59]。请改用span.TotalMinutes
  • 这不应该是公认的答案。根据其他 cmets,它不能正确解决问题。
  • @tjmoore 感谢您的反馈,我同意您的看法。我在 2012 年 1 月回答了最初的问题,之后对问题进行了编辑。我偶尔会对此答案投反对票,可能是因为大多数人在提出原始未经编辑的问题 5 年后才阅读答案。
【解决方案2】:

你只需要像varTime.TotalMinutes这样查询TotalMinutes属性

【讨论】:

    【解决方案3】:

    在您的问题代码中,您错误地使用了TimeSpan.FromMinutes。请参阅MSDN Documentation for TimeSpan.FromMinutes,它给出了以下方法签名:

    public static TimeSpan FromMinutes(double value)
    

    因此,以下代码将无法编译

    var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile
    

    相反,您可以使用TimeSpan.TotalMinutes 属性来执行此算术运算。例如:

    TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
    double fractionalMinutes = varTime.TotalMinutes;
    int wholeMinutes = (int)fractionalMinutes;
    

    【讨论】:

      【解决方案4】:

      如果 endTime 和 startTime 之间的差大于或等于 60 分钟,则语句:endTime.Subtract(startTime).Minutes; 将始终返回 (minutesDifference % 60)。显然,当我们只谈论分钟(这里不是小时)时,这是不希望的。
      如果你想获得total number of minutes(在不同的类型转换中),这里有一些方法:

      // Default value that is returned is of type *double* 
      double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
      int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
      long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
      string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
      

      【讨论】:

        【解决方案5】:
        double minutes = varTime.TotalMinutes;
        int minutesRounded = (int)Math.Round(varTime.TotalMinutes);
        

        TimeSpan.TotalMinutes:此实例表示的总分钟数。

        【讨论】:

        • 是的 TotalMinutes 是我一直在寻找的。非常感谢^_^
        • int minutesRounded = (int)Math.Round(minutes);
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多