C# TimeSpan 构造函数、属性与实战用法详解

唐可
唐可
发布时间:2026-10-16| 9人浏览过
原创

在 C# 开发中,TimeSpan 是处理时间间隔的核心类型,常用于表示两个时间点之间的差异。它提供多种构造函数初始化的方法,以及丰富的属性用于提取天、小时、秒、毫秒或总刻度数(Ticks)。本文将详细解析其构造方式、属性含义,并通过实际代码展示如何计算和输出时间间隔。

1. 理解 TimeSpan 与 Ticks

TimeSpan 表示一个时间间隔,即持续的时间长度,而非特定的日期点。其内部基于 Ticks 进行存储和计算。

  • Ticks (刻度):计算机的最小计时单位之一,1 Tick = 100 纳秒(即 0.0000001 秒)。
  • 因此,1 秒 = 10,000,000 Ticks。
  • 理解 Ticks 有助于精确计算时间差,尤其在涉及高精度计时场景时。

2. TimeSpan 的四种构造函数

TimeSpan 提供了以下四种常用构造函数,分别对应不同精度的时间初始化:

  1. TimeSpan(Int64 ticks)
    • 参数:Int64 类型的刻度数。
    • 用途:直接按最小时间单位初始化,适用于高精度计算。
  2. TimeSpan(int hours, int minutes, int seconds)
    • 参数:小时、分钟、秒。
    • 用途:快速设置常规时间跨度。
  3. TimeSpan(int days, int hours, int minutes, int seconds)
    • 参数:天、小时、分钟、秒。
    • 用途:当跨度超过一天时使用。
  4. TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds)
    • 参数:天、小时、分钟、秒、毫秒。
    • 用途:需要包含毫秒精度时的完整初始化。

第1步:使用构造函数创建 TimeSpan 对象

目的:验证不同参数的构造效果,观察输出格式。

操作:运行以下 C# 代码:

using System;

class Program {
    static void Main() {
        // 1. 仅用刻度数初始化
        TimeSpan ts0 = new TimeSpan(36); 

        // 2. 初始化:4小时20分33秒
        TimeSpan ts1 = new TimeSpan(4, 20, 33);

        // 3. 初始化:2天10小时36分45秒
        TimeSpan ts2 = new TimeSpan(2, 10, 36, 45);

        // 4. 初始化:6天12小时56分45秒23毫秒
        TimeSpan ts3 = new TimeSpan(6, 12, 56, 45, 23);

        Console.WriteLine("ts0: " + ts0);
        Console.WriteLine("ts1: " + ts1);
        Console.WriteLine("ts2: " + ts2);
        Console.WriteLine("ts3: " + ts3);
    }
}

3. TimeSpan 核心属性解析

初始化完成后,可通过属性访问时间间隔的不同组成部分。需区分“部分属性”与“总值属性”:

第2步:查看部分属性与总值属性

目的:明确获取具体时间片段与换算为统一单位的方法。

部分属性(只返回该时间单位的整数部分)

  • Days:天数部分(0-365+)。
  • Hours:小时部分(0-23),若总时长不足一天,则为剩余小时数。
  • Minutes:分钟部分(0-59)。
  • Seconds:秒部分(0-59)。
  • Milliseconds:毫秒部分(0-999)。
  • Ticks:总的刻度数(Long类型)。

总值属性(返回浮点数,表示等效总量)

  • TotalDays:等效的天数(含小数)。
  • TotalHours:等效的小时数。
  • TotalMinutes:等效的分钟数。
  • TotalSeconds:等效的秒数。
  • TotalMilliseconds:等效的毫秒数。

注意:Hours 属性返回的是当前时间段内的小时数(例如 27 小时会被显示为 1 天 3 小时,此时 Hours 为 3),而 TotalHours 会返回 27.0。在实际业务逻辑中,通常优先使用 TotalXXX 属性进行数值运算,使用部分属性进行 UI 展示。

第3步:实战演练 —— 计算两个 DateTime 的时间差

目的:演示通过两个 DateTime 相减生成 TimeSpan,并提取详细信息。

操作:定义一个起始时间和当前时间,计算差值并输出各项属性:

using System;

class Program {
    static void Main() {
        // 1. 定义起始时间
        DateTime dt1 = new DateTime(2014, 9, 22, 7, 16, 39);
        
        // 2. 获取当前时间
        DateTime dt2 = DateTime.Now;

        // 3. 计算时间差,生成 TimeSpan
        TimeSpan ts4 = dt2 - dt1;

        // 4. 输出完整信息
        Console.WriteLine($"整体时间间隔: {ts4}");
        Console.WriteLine($"天数部分: {ts4.Days}");
        Console.WriteLine($"小时部分: {ts4.Hours}");
        Console.WriteLine($"分钟部分: {ts4.Minutes}");
        Console.WriteLine($"秒部分: {ts4.Seconds}");
        Console.WriteLine($"毫秒部分: {ts4.Milliseconds}");

        // 5. 输出等效总值
        Console.WriteLine($"总刻度数(Ticks): {ts4.Ticks}");
        Console.WriteLine($"总天数(TotalDays): {ts4.TotalDays:F8}");
        Console.WriteLine($"总小时数(TotalHours): {ts4.TotalHours:F4}");
        Console.WriteLine($"总秒数(TotalSeconds): {ts4.TotalSeconds:F0}");
    }
}

代码说明:

  • dt2 - dt1 直接返回 TimeSpan 类型,这是 .NET 中最常用的时间差获取方式。
  • Ticks 的输出值极大(如数十亿或数百亿),因为它是以 100 纳秒为单位累积的。
  • 格式化字符串 {0:F8} 用于保留足够的小数位,以便看清时间的细微差别。

4. 总结

C# 中的 TimeSpan 是处理持续时间、时间间隔和日期差的强大工具。通过合理选择构造函数初始化,并灵活运用 Days/TotalDays 等属性,可以高效地完成计时器、延迟处理、日志分析等功能。建议在需要进行数学运算或排序时使用 TotalXXX 属性,而在需要向用户展示人类可读的时间片段时使用部分属性。

以上就是 C# 的 TimeSpan 案例详解的详细内容,更多关于 C# TimeSpan 使用的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。