C# TimeSpan时间间隔 作者:马育民 • 2025-06-05 23:41 • 阅读:10004 # 介绍 TimeSpan 是 C# 中的一个结构( struct ),用于表示时间间隔或持续时间。 它位于 System 命名空间中 是处理时间相关操作时非常重要的工具,尤其是在计算两个日期或时间之间的差值、表示时间段或执行时间相关的运算时。 ### 官网 https://learn.microsoft.com/zh-cn/dotnet/api/system.timespan?view=net-8.0 ### 范围 可以表示从负数到正数的时间间隔,范围从 `-10675199` 天、`2` 小时、`48` 分钟和 `5.4775808` 秒 到 `10675199` 天、`2` 小时、`48` 分钟和 `5.4775807` 秒 。 ### 应用场景 - 计算两个日期或时间的差值:通过减法运算符或 TimeSpan 构造函数。 - 表示持续时间:例如,任务的执行时间、事件的持续时间等。 - 时间的加减运算:与 DateTime 结合使用,对日期或时间进行加减操作。 # TimeSpan 的构造和初始化 TimeSpan 提供了多种构造方式,用于创建表示时间间隔的对象。 ### 常用的构造函数 ``` // 通过天、小时、分钟、秒来构造 TimeSpan TimeSpan ts1 = new TimeSpan(1, 2, 30, 45); // 表示 1 天 2 小时 30 分钟 45 秒 // 通过总秒数构造 TimeSpan TimeSpan ts2 = TimeSpan.FromSeconds(3600); // 表示 1 小时 // 通过总分钟数构造 TimeSpan TimeSpan ts3 = TimeSpan.FromMinutes(90); // 表示 1 小时 30 分钟 // 通过总天数构造 TimeSpan TimeSpan ts4 = TimeSpan.FromDays(1.5); // 表示 1 天 12 小时 ``` ### 从字符串中解析 ``` // 表示 1 小时 2 分钟 30 秒 TimeSpan ts5 = TimeSpan.Parse("01:02:30"); // 使用自定义格式解析 TimeSpan ts6 = TimeSpan.ParseExact("01:02:30", @"hh\:mm\:ss", null); ``` # TimeSpan 的属性 TimeSpan 提供了一些只读属性,用于获取时间间隔的各个组成部分: - `Days`:时间间隔中的天数部分。 - `Hours`:时间间隔中的小时部分。 - `Minutes`:时间间隔中的分钟部分。 - `Seconds`:时间间隔中的秒部分。 - `Milliseconds`:时间间隔中的毫秒部分。 - `Ticks`:时间间隔的刻度(1 tick = 100 纳秒)。 - `TotalDays`:时间间隔的总天数(包括小数部分)。 - `TotalHours`:时间间隔的总小时数(包括小数部分)。 - `TotalMinutes`:时间间隔的总分钟数(包括小数部分)。 - `TotalSeconds`:时间间隔的总秒数(包括小数部分)。 ### 例子 ``` TimeSpan ts = new TimeSpan(1, 2, 30, 45); //输出时间间隔的天数、小时、分钟、秒 Console.WriteLine($"Days: {ts.Days}, Hours: {ts.Hours}, Minutes: {ts.Minutes}, Seconds: {ts.Seconds}"); //输出时间间隔的总秒数 Console.WriteLine($"Total Seconds: {ts.TotalSeconds}"); ``` # 运算 TimeSpan 支持加法、减法和比较运算,可以方便地进行时间间隔的计算: ### 加法和减法 ``` TimeSpan ts1 = new TimeSpan(1, 0, 0); // 1 天 TimeSpan ts2 = new TimeSpan(0, 2, 0); // 2 小时 TimeSpan result = ts1 + ts2; // 结果为 1 天 2 小时 TimeSpan difference = ts1 - ts2; // 结果为 0 天 22 小时 ``` ### 比较 ``` TimeSpan ts1 = new TimeSpan(1, 0, 0); TimeSpan ts2 = new TimeSpan(0, 24, 0); if (ts1 == ts2) { Console.WriteLine("ts1 和 ts2 相等"); } else { Console.WriteLine("ts1 和 ts2 不相等"); } ``` # TimeSpan 与 DateTime 的结合 ### 两个 DateTime 相减 ``` DateTime now = DateTime.Now; DateTime dt = new DateTime(2025, 6,9,10,0,0); TimeSpan ts = now - dt Console.WriteLine($"间隔总共秒数: {ts.TotalSeconds}"); ``` ### TimeSpan 与 DateTime 加减 ``` DateTime now = DateTime.Now; TimeSpan duration = new TimeSpan(1, 2, 30, 0); // 1 天 2 小时 30 分钟 DateTime future = now + duration; // 当前时间加上时间间隔 DateTime past = now - duration; // 当前时间减去时间间隔 ``` 原文链接:https://blog.csdn.net/weixin_59555766/article/details/145913506 原文出处:http://www.malaoshi.top/show_1GW1G0j3dPoK.html