0Pricing
C# Academy · 课时

TimeSpan 与持续时间

测量时间跨度。

TimeSpan 与持续时间 是 CoddyKit 上的免费 C# Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。

什么是 TimeSpan

DateTime 表示时间轴上的一个时刻,而 TimeSpan 表示一段持续时间,例如 2 小时或 90 分钟。

它表示不附带日历信息的持续时间。您可以将它用于秒表结果、超时,以及计算两个日期之间的间隔。

创建 TimeSpan

有一个构造函数接受小时、分钟和秒:new TimeSpan(hours, minutes, seconds)。

因此,new TimeSpan(1, 30, 0) 表示一小时三十分钟。该值会以清晰的 h:mm:ss 格式输出。

using System;

class Program
{
    static void Main()
    {
        TimeSpan span = new TimeSpan(1, 30, 0);
        Console.WriteLine(span);
    }
}

工厂方法

很多时候,使用工厂方法读起来更清晰。TimeSpan.FromMinutes(90) 会创建一个持续 90 分钟的时间跨度。

还有对应的辅助方法:FromHours、FromSeconds、FromDays 和 FromMilliseconds。

using System;

class Program
{
    static void Main()
    {
        TimeSpan span = TimeSpan.FromMinutes(90);
        Console.WriteLine(span);
    }
}

总值与组成部分值

TimeSpan 有两类属性。Hours、Minutes 和 Seconds 表示拆分后的组成部分。

而像 TotalMinutes 这样的 Total... 属性,会以小数形式用一个单位表示整段持续时间。

using System;

class Program
{
    static void Main()
    {
        TimeSpan span = TimeSpan.FromMinutes(90);
        Console.WriteLine(span.Hours);
        Console.WriteLine(span.TotalMinutes);
    }
}

组成部分值与总值的区别

对于 90 分钟,Hours 是 1,Minutes 是 30,因为这段持续时间可以拆分为 1 小时 30 分钟。

但 TotalHours 是 1.5,TotalMinutes 是 90,因为它们分别用单一单位计算整段时间。

using System;

class Program
{
    static void Main()
    {
        TimeSpan span = TimeSpan.FromMinutes(90);
        Console.WriteLine(span.TotalHours);
    }
}

计算两个日期的差值

从一个 DateTime 中减去另一个 DateTime 时,结果是一个 TimeSpan。

这是计算两个时刻之间经过了多长时间的常用方式,例如计算某个事件持续了多久。

using System;

class Program
{
    static void Main()
    {
        DateTime start = new DateTime(2024, 3, 5, 9, 0, 0);
        DateTime end = new DateTime(2024, 3, 5, 11, 30, 0);
        TimeSpan diff = end - start;
        Console.WriteLine(diff.TotalHours);
    }
}

相加 TimeSpan

您可以使用普通的 + 和 - 运算符来相加或相减 TimeSpan 值。

组合两个持续时间会得到更长的持续时间,这对于累加多个时间间隔很有用。

using System;

class Program
{
    static void Main()
    {
        TimeSpan a = TimeSpan.FromMinutes(45);
        TimeSpan b = TimeSpan.FromMinutes(15);
        Console.WriteLine((a + b).TotalMinutes);
    }
}

负持续时间

如果结束时间早于开始时间,或者进行了减法运算,TimeSpan 就可能是负值。

Duration 方法会返回绝对值,而 Negate 会翻转正负号。当您只关心数值大小时,这些功能很有帮助。

using System;

class Program
{
    static void Main()
    {
        TimeSpan span = TimeSpan.FromHours(-3);
        Console.WriteLine(span.Duration().TotalHours);
    }
}

比较持续时间

TimeSpan 值可以像数字一样使用 <、> 和 == 进行比较。

这样,您就能检查一个持续时间是否比另一个更长,例如确保时间不超过允许的上限。

using System;

class Program
{
    static void Main()
    {
        TimeSpan limit = TimeSpan.FromHours(2);
        TimeSpan used = TimeSpan.FromMinutes(150);
        Console.WriteLine(used > limit);
    }
}

零值与常量

TimeSpan.Zero 表示没有经过时间,是累加持续时间时很方便的起始值。

此外,还有表示持续时间极限边界的 TimeSpan.MinValue 和 TimeSpan.MaxValue。

using System;

class Program
{
    static void Main()
    {
        TimeSpan total = TimeSpan.Zero;
        total += TimeSpan.FromMinutes(10);
        Console.WriteLine(total.TotalMinutes);
    }
}

设置 TimeSpan 格式

您可以使用自定义字符串设置 TimeSpan 的格式。例如,@"hh\:mm" 会显示小时和分钟。

反斜杠会转义冒号,使其按字面形式显示。若只需要快速输出,默认的 ToString 通常就足够了。

using System;

class Program
{
    static void Main()
    {
        TimeSpan span = new TimeSpan(2, 5, 0);
        Console.WriteLine(span.ToString(@"hh\:mm"));
    }
}

快速检查

您有一个持续 90 分钟的 TimeSpan。哪个属性会返回 1.5?

回顾

TimeSpan 表示一段持续时间。您可以使用 new TimeSpan(...) 或 FromMinutes 等工厂方法创建它。

组成部分属性(Hours)不同于 Total... 属性。相减两个 DateTime 会得到一个 TimeSpan,您还可以相加、比较和设置持续时间的格式。

常见问题解答

「TimeSpan 与持续时间」课时是免费的吗?

是的 — 「TimeSpan 与持续时间」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。

「TimeSpan 与持续时间」这节课中我会学到什么?

测量时间跨度。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「TimeSpan 与持续时间」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 创建 DateTimes
  2. 格式化日期
  3. TimeSpan 与持续时间
  4. 日期运算
← 返回 C# Academy