ZetCode

C# TimeSpan

最后修改于 2023 年 7 月 5 日

在本文中,我们将使用 C# 中的 TimeSpan。

TimeSpan 表示一个时间间隔(时间长度或经过的时间),它以天、小时、分钟、秒和秒的小数部分的有符号数字来衡量。

TimeSpan 对象的值范围可以从 TimeSpan.MinValueTimeSpan.MaxValueTimeSpan 测量的最大时间单位是天。它不能用年或月来表示,因为这些单位的时间长度是可变的。例如,一个月可以有 28、29、30 或 31 天。

构造函数 描述
TimeSpan(Int64) 初始化为指定的刻度数
TimeSpan(Int32, Int32, Int32) 初始化为指定的小时数、分钟数和秒数
TimeSpan(Int32, Int32, Int32, Int32) 初始化为指定的天数、小时数、分钟数和秒数
TimeSpan(Int32, Int32, Int32, Int32, Int32) 初始化为指定的天数、小时数、分钟数、秒数和毫秒数
TimeSpan(Int32, Int32, Int32, Int32, Int32, Int32) 初始化为指定的天数、小时数、分钟数、秒数、毫秒数和微秒数
表格:TimeSpan 构造函数

C# TimeSpan 简单示例

以下是一个使用 TimeSpan 的简单示例。

Program.cs
TimeSpan ts1 = new TimeSpan(2, 4, 5);
Console.WriteLine(ts1);

TimeSpan ts2 = new TimeSpan(2, 4, 5, 9);
Console.WriteLine(ts2);

Console.WriteLine(TimeSpan.TicksPerDay);
Console.WriteLine(TimeSpan.TicksPerHour);
Console.WriteLine(TimeSpan.TicksPerMinute);

Console.WriteLine(TimeSpan.MinValue);
Console.WriteLine(TimeSpan.MaxValue);

在该程序中,我们创建了两个 TimeSpan 结构实例,打印每天、每小时和每分钟的刻度数,并打印 TimeSpan 的最小值和最大值。

$ dotnet run
02:04:05
2.04:05:09
864000000000
36000000000
600000000
-10675199.02:48:05.4775808
10675199.02:48:05.4775807

C# TimeSpan 基本算术运算

我们可以在 TimeSpan 对象上使用一些基本的算术运算。

Program.cs
TimeSpan ts = new TimeSpan(2, 4, 5, 5);
Console.WriteLine(ts);

TimeSpan ts2 = new TimeSpan(4, 1, 0, 0);
Console.WriteLine(ts2);

var res = ts + ts2;
Console.WriteLine(res);

var res2 = ts * 2;
Console.WriteLine(res2);

var res3 = ts2 - ts;
Console.WriteLine(res3);

在该程序中,我们添加、乘和减去 TimeSpan 结构。

$ dotnet run
2.04:05:05
4.01:00:00
6.05:05:05
4.08:10:10
1.20:54:55

在下一个示例中,我们将 TimeSpanDateTime 一起使用。

Program.cs
var now = DateTime.Now;
var ts = new TimeSpan(2, 4, 5);

var res = now.Add(ts);
var res2 = now.Subtract(ts);

Console.WriteLine(now);
Console.WriteLine(res);
Console.WriteLine(res2);

在该程序中,我们获取当前日期时间。我们添加和减去一个 TimeSpan 值。

$ dotnet run
10/12/2022 8:23:57 PM
10/12/2022 10:28:02 PM
10/12/2022 6:19:52 PM

C# TimeSpan From 方法

TimeSpan 具有方便的方法,可以从单个值创建实例。

Program.cs
var ts1 = TimeSpan.FromDays(2.7);
Console.WriteLine(ts1);

var ts2 = TimeSpan.FromHours(4.5);
Console.WriteLine(ts2);

var ts3 = TimeSpan.Minutes(12.5);
Console.WriteLine(ts3);

var res = ts1 + ts2 + ts3;
Console.WriteLine(res);

该程序使用 TimeSpan.FromDaysTimeSpan.FromHoursTimeSpan.FromMinutes

$ dotnet run
2.16:48:00
04:30:00
00:12:30
2.21:30:30

博罗季诺战役

在以下示例中,我们减去两个日期值。

Program.cs
DateTime now = DateTime.Today;
DateTime borodino_battle = new DateTime(1812, 9, 7);

TimeSpan diff = now - borodino_battle;

Console.WriteLine($"{diff.TotalDays} days have passed since the Battle of Borodino.");

在该示例中,我们计算自博罗季诺战役以来经过的天数。

DateTime now = DateTime.Today;
DateTime borodino_battle = new DateTime(1812, 9, 7);

我们定义了两个 DateTime 对象:一个用于今天,一个用于博罗季诺战役的日期。

TimeSpan diff = now - borodino_battle;

通过减去这两个对象,我们得到一个 TimeSpan 对象。

Console.WriteLine($"{diff.TotalDays} days have passed since the Battle of Borodino.");

TotalDays 属性具有经过的时间的天数。

$ dotnet run
76736 days have passed since the Battle of Borodino.

截至 2022 年 10 月 12 日,自博罗季诺战役以来已经过去了 76736 天。

来源

TimeSpan 结构 - 语言参考

在本文中,我们使用了 C# 中的 TimeSpan 结构。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 我自 2007 年以来一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程