【问题标题】:Get time range from dates stored in DataRow of a DataTable从存储在 DataTable 的 DataRow 中的日期获取时间范围
【发布时间】:2015-08-25 19:50:48
【问题描述】:

我需要获取两个时间戳之间的时间长度。数据在数据表中。

我正在尝试这样的事情。

System.TimeSpan date5 = (DateTime)drStatus["End"] - (DateTime)drStatus["Start"];

这不会出错,只是返回一个十进制数。这可以格式化为 hh:mm:ss 吗?

【问题讨论】:

  • 你的第二个例子给你一个错误?它给你什么错误?在哪一行?
  • 第二个示例错误错误 2 参数 1:无法从 'object' 转换为 'long' C:\ProjectsCorp\Accounting\AccountingTrackerReport\VS2010\Form1.cs 178 51 AccountingTrackerReport
  • TimeSpan duration = DateTime.Parse(end).Subtract(DateTime.Parse(start));
  • @MatthewD 这不返回 decimal 它返回 TimeSpan 并且您可以使用 TimeSpan.ToString(string format) 格式化它
  • 查看Custom TimeSpan Format Strings。或者只是使用date5.ToString()的默认值

标签: c# datatable timestamp timespan datarow


【解决方案1】:

当使用TimeSpan.ToString() 时,TimeSpan 的默认字符串表示为[-][d.]hh:mm:ss[.fffffff]。您可以使用TimeSpan.ToString(string format) 指定您自己的format,但应注意小时格式化程序将不包括包含在日部分中的小时。如果您想要hh:mm:ss 格式,其中小时数可以超过 24,那么您需要

string result = string.Format(
    "{0}:{1:00}:{2:00}", 
    myTimeSpan.Days * 24 + myTimeSpan.Hours, 
    Math.Abs(myTimeSpan.Minutes), 
    Math.Abs(myTimeSpan.Seconds));

TimeSpan 为负数时,需要Math.Abs 以避免出现类似“-12:-30:-20”的情况。

【讨论】:

    【解决方案2】:

    这是一个非常简单的方法

    var startTime1 = DateTime.Now.ToString();
    var endTime1 = DateTime.Now.ToString();
    TimeSpan duration = DateTime.Parse(endTime1).Subtract(DateTime.Parse(startTime1));
    var formattedTimeSpan = duration.ToString(@"hh\ \:\ mm\ \:\ ss\ \:\ fff");
    

    【讨论】:

    • 当然,但是endTimestartTime 是什么?很明显,OP 的原始错误是从自身中减去相同的列值。
    • 您认为 OP 的第一种方法 System.TimeSpan date5 = (DateTime)drStatus["End"] - (DateTime)drStatus["Start"]; 有什么问题?
    • 您的意思是他所说的变量会产生错误,因为他错误地使用了DateTime ctor?
    • @Rahul 你是说给猫剥皮的方法不止一种..?这是非常直截了当的,所以不确定你的意思是什么..
    • 我认为他的观点是,当原始问题从自身减去相同的值并错误地使用 ctor 时,您只是给出了不同的方法。现在问题似乎是格式化TimeSpan。您的回答目前没有解决任何这些问题。
    猜你喜欢
    • 1970-01-01
    • 2022-11-06
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2023-01-10
    相关资源
    最近更新 更多