首页 > 编程笔记 > C#笔记 阅读:34

C# TimeSpan的用法(附带实例)

TimeSpan 属于 System 类,主要用于处理时间的间隔。

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 的属性如下:
【实例 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 类常用的方法如下:

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]

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

相关文章