C# TimeSpan的用法(附带实例)
DateTime 类的使用非常有弹性,可以使用下列构建方法创建时间对象:
public TimeSpan(long ticks); public TimeSpan(int hours, int minutes, int seconds); public TimeSpan(int days, int hours, int minutes, int seconds); public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds);
C# TimeSpan的属性
TimeSpan 的属性如下:- Days:天数;
- Hours:小时数;
- Minutes:分钟数;
- Seconds:秒数;
- MilliMinutes:毫秒数;
- Ticks:1000000 Tick 等于 1 秒,刻度(Tick)数目;
- TotalDays:显示完整的天数,也会显示小时、分钟、秒、毫秒;
- TotalHours:显示完整小时数,也会显示分钟、秒、毫秒;
- TotalMinutes:显示完整分钟数,也会显示秒、毫秒;
- TotalSeconds:显示完整秒数,也会显示毫秒;
- TotalMilliseconds:显示完整毫秒数。
【实例 1】创建 TimeSpan 对象同时输出 TotalDays 和相关属性。
TimeSpan interval = new TimeSpan(5, 10, 40, 35, 350); Console.WriteLine($"TimeSpan interval : {interval}"); Console.WriteLine($"TotalDays : {interval.TotalDays}"); Console.WriteLine($"Days : {interval.Days,-3}"); Console.WriteLine($"Hours : {interval.Hours,-3}"); Console.WriteLine($"Minutes : {interval.Minutes,-3}"); Console.WriteLine($"Seconds : {interval.Seconds,-3}"); Console.WriteLine($"Milliseconds : {interval.Milliseconds,-3}");执行结果为:
TimeSpan interval : 5.10:40:35.3500000
TotalDays : 5.44485358796296
Days : 5
Hours : 10
Minutes : 40
Seconds : 35
Milliseconds : 350
【实例 2】创建 TimeSpan 对象同时输出 TotalHours 和相关属性。
TimeSpan interval = new TimeSpan(1, 10, 40, 35, 350); Console.WriteLine($"TimeSpan interval : {interval}"); Console.WriteLine($"TotalHours : {interval.TotalHours}"); Console.WriteLine($"Hours : {interval.Hours,-3}"); Console.WriteLine($"Minutes : {interval.Minutes,-3}"); Console.WriteLine($"Seconds : {interval.Seconds,-3}"); Console.WriteLine($"Milliseconds : {interval.Milliseconds,-3}");执行结果为:
TimeSpan interval : 1.10:40:35.3500000
TotalHours : 34.6764861111111
Hours : 10
Minutes : 40
Seconds : 35
Milliseconds : 350
【实例 3】创建 TimeSpan 对象同时输出 TotalMinutes 和相关属性。
TimeSpan interval = new TimeSpan(1, 10, 40, 35, 350); Console.WriteLine($"TimeSpan interval : {interval}"); Console.WriteLine($"TotalMinutes : {interval.TotalMinutes}"); Console.WriteLine($"Minutes : {interval.Minutes,-3}"); Console.WriteLine($"Seconds : {interval.Seconds,-3}"); Console.WriteLine($"Milliseconds : {interval.Milliseconds,-3}");执行结果为:
TimeSpan interval : 1.10:40:35.3500000
TotalMinutes : 2080.58916666667
Minutes : 40
Seconds : 35
Milliseconds : 350
【实例 4】创建 TimeSpan 对象同时输出 TotalSeconds 和相关属性。
TimeSpan interval = new TimeSpan(1, 10, 40, 35, 350); Console.WriteLine($"TimeSpan interval : {interval}"); Console.WriteLine($"TotalSeconds : {interval.TotalSeconds}"); Console.WriteLine($"Seconds : {interval.Seconds,-3}"); Console.WriteLine($"Milliseconds : {interval.Milliseconds,-3}");执行结果为:
TimeSpan interval : 1.10:40:35.3500000
TotalSeconds : 124835.35
Seconds : 35
Milliseconds : 350
C# TimeSpan类常用方法
TimeSpan 类常用的方法如下:- Add(): 加法,回传新的 TimeSpan。
- Subtract(): 减法,回传新的 TimeSpan。
- Parse() 和 TryParse(): 解析时间间隔字符串,将其转为相等的 TimeSpan 字符串。TryParse() 也解析日期与时间字符串,将其转为 TimeSpan 格式,但是还会回传布尔值 bool,如果成功转换则回传 true,如果失败则回传 false。
1) 时间间隔加法Add()
时间间隔加法 Add() 的语法如下:public TimeSpan Add(TimeSpan ts);
【实例 5】时间间隔加法的应用。
TimeSpan ts1 = new TimeSpan(10, 20, 30); var ts2 = new TimeSpan(2, 5, 40); Console.WriteLine($"{ts1.Add(ts2)}");执行结果为:
12:26:10
2) 时间间隔减法Subtract()
时间间隔减法 Subtract() 的语法如下:public TimeSpan Subtract(TimeSpan ts);
【实例 6】时间间隔减法的应用。
TimeSpan ts1 = new TimeSpan(10, 20, 30); var ts2 = new TimeSpan(2, 30, 40); Console.WriteLine($"{ts1.Subtract(ts2)}");执行结果为:
07:49:50
3) 解析字符串为时间间隔Parse()和TryParse()
常用的 Parse() 方法语法如下:public static TimeSpan Parse(string s);上述 s 是要解析的日期或时间字符串,其可以是下列格式:
[ws][-]{d.}hh.mm[:ss[.ff]][ws]
- ws: 这是选项,表示空白;
- -: 这是选项,表示负号;
- d: 天数,范围是 0~10675799;
- : 文化特性,分隔天数与小时;
- hh: 小时,范围是 0~23;
- : 文化特性,时间分隔符;
- mm: 分钟,范围是 0~59;
- ss: 秒,范围是从 0~59;
- ff: 文化特性,区分秒数与小数点秒数。
TryParse() 与 Parse() 功能相同,但是有回传值,如果转换成功则回传 true,如果转换失败则回传 false,此方法的语法如下:
bool TimeSpan.TryParse(str, TimeSpan ts);
【实例 7】解析字符串成为 TimeSpan 的时间格式。
using System.Globalization; string[] values = { "5", "5:22", "5:22:14", "5:22:14:45", "5.22:14:45", "5:22:14:45.3448", "5:10:14:45" }; foreach (string value in values) { TimeSpan ts = TimeSpan.Parse(value); Console.WriteLine($"{value,18} : {ts.ToString()}"); }执行结果为:
5 : 5.00:00:00 5:22 : 05:22:00 5:22:14 : 05:22:14 5:22:14:45 : 5.22:14:45 5.22:14:45 : 5.22:14:45 5:22:14:45.3448 : 5.22:14:45.3448000 5:10:14:45 : 5.10:14:45
【实例 8】使用 TryParse() 方法替换 Parse() 方法,重新设计实例 7,同时增加非时间间隔的字符串。
using System.Globalization; string[] values = { "5", "5:22", "5:22:14", "5:22:14:45", "test2.22:14:45", "5.22:14:45", "5:22:14:45.3448", "5:10:14:45" }; TimeSpan ts; foreach (string value in values) { if (TimeSpan.TryParse(value, out ts)) Console.WriteLine($"{value,18} : {ts.ToString()}"); else Console.WriteLine($"{value,18} : 转换失败"); }执行结果为:
5 : 5.00:00:00 5:22 : 05:22:00 5:22:14 : 05:22:14 5:22:14:45 : 5.22:14:45 test2.22:14:45 : 转换失败 5.22:14:45 : 5.22:14:45 5:22:14:45.3448 : 5.22:14:45.3448000 5:10:14:45 : 5.10:14:45如果使用 Parse() 转换失败,程序会异常终止,所以一般比较常使用 TryParse(),因为 TryParse() 可以避免程序异常终止。
DateTime和TimeSpan的混合应用
DateTime Add() 和 Subtract() 方法的语法如下:public DateTime Add(TimeSpan value); public DateTime Subtract(TimeSpan value);
【实例 9】计算未来日期与时间。
DateTime currentTime = DateTime.Now; Console.WriteLine($"现在时间:{currentTime}"); TimeSpan duration = new System.TimeSpan(3, 0, 0, 0); Console.WriteLine($"3 天后时间:{currentTime.Add(duration)}"); duration = new System.TimeSpan(3, 10, 5, 5); Console.WriteLine($"3 天 10 小时 5 分钟后时间:{currentTime.Add(duration)}");执行结果为:
现在时间:5/9/2025 3:49:51 AM
3 天后时间:5/12/2025 3:49:51 AM
3 天 10 小时 5 分钟后时间:5/12/2025 1:54:56 PM
【实例 10】计算过去日期与时间。
DateTime currentTime = DateTime.Now; Console.WriteLine($"现在时间:{currentTime}"); TimeSpan before = new System.TimeSpan(3, 10, 5, 0); Console.WriteLine($"3 天前时间:{currentTime.Subtract(before)}");执行结果为:
现在时间:5/9/2025 3:50:40 AM
3 天前时间:5/5/2025 5:45:40 PM