【问题标题】:i need it to return in a Time Format [closed]我需要它以时间格式返回[关闭]
【发布时间】:2017-11-02 16:21:59
【问题描述】:

我需要它以 EX 0:00:00 的时间格式返回

方法/功能

        public override DateTime OverallReadingTime()
        {
            return FinishTime.Subtract(StartTime);
        }

我了解时间跨度,但想知道为什么这不起作用

【问题讨论】:

  • 如果您的read the manual 您会发现 DateTime.Subtract 返回的是 TimeSpan 而不是 DateTime。
  • 你能澄清一下你的意思吗?您是在谈论如何格式化打印到屏幕的时间?
  • 你想要TimeSpan: public TimeSpan OverallReadingTime => FinishTime - StartTime;
  • 两个日期之间的差异不是另一个日期。您的覆盖以及您要覆盖的基类都是完全错误的。

标签: c# datetime time


【解决方案1】:

编译错误

您的代码无法编译,因为DateTime.Subtract(..) 函数返回TimeSpan,但您的函数需要DateTime 类型。

选项

  • 继续使用被覆盖的函数,并根据 mattshu 的回答进行调整。
  • 创建一个返回 TimeSpan 类型的新函数(见下文)。
  • 创建一个返回 String 类型的新函数(另见下文)。

时间跨度选项

public TimeSpan OverallReadingTime()
{
    return FinishTime.Subtract(StartTime);
}

字符串选项

public string OverallReadingTime()
{
    return FinishTime.Subtract(StartTime).ToString();
}

【讨论】:

  • 两个日期之间的差异永远不会是另一个日期。唯一正确的结果是 TimeSpan。因此,整个问题是基于一个错误的假设。至少你的答案是正确的,尽管如果基类需要 DateTime 作为结果,你不能用 TimeSpan 覆盖。
  • 我觉得唯一做出错误假设的人就是您,先生。我只是为他提供了一个选项,因为 OP 没有给我们足够的背景信息。所以只有他才能做出最终决定,我只是提供一些选项来帮助他做出决定。
  • 也许你还没有理解我的意思。如果基类将方法 OverallReadingTime 定义为返回 DateTime,则不能在返回 TimeSpan 的派生类中覆盖它。这是我想在你的问题中强调的唯一一点。因此,虽然返回 TimeSpan 是您测量两个日期之间的差异时唯一正确的做法,但您可能应该建议 OP 更改基类定义以允许您的覆盖工作。
  • 在我说明这一点的代码示例之前,您是否阅读了该段落。我重组了我的答案,以便这个问题更清楚。
【解决方案2】:

减法后可以改变格式

public override DateTime OverallReadingTime()
{
    return Convert.ToDateTime(FinishTime.Subtract(StartTime).ToString("hh\:mm\:ss"));
}
【解决方案3】:

您应该详细说明您的问题。但是,解决方案是使用覆盖的“-”-操作符。

        DateTime start = DateTime.Now;
        DateTime end = start.AddHours(2);
        Console.WriteLine((end - start));

产生02:00:00

你想要的输出是什么?因此,将函数的返回变量更改为字符串和return (FinishTime - StartTime).ToString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2020-09-24
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多