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 反馈 — 无需本地设置。
此课程中的所有课时
- 创建 DateTimes
- 格式化日期
- TimeSpan 与持续时间
- 日期运算