当前位置:首页 > 行业动态 > 正文

c#时间差值

C#中计算时间差值,使用TimeSpan类。

C TimeSpan 计算时间差(时间间隔)详解

在C中,TimeSpan类用于表示时间间隔,它可以表示正数、负数或零的时间间隔,TimeSpan类提供了一系列方法来处理和操作时间间隔,本文将详细介绍如何使用C中的TimeSpan类计算时间差。

TimeSpan的基本概念

TimeSpan是一个结构体,它包含三个字段:Ticks( ticks)、Days( days)和Milliseconds( milliseconds),Ticks字段表示时间间隔的总刻度数,Days字段表示时间间隔的天数,Milliseconds字段表示时间间隔的毫秒数。

1、1 Ticks字段

Ticks字段表示时间间隔的总刻度数,它是从0001年1月1日0时0分0秒(UTC)到指定日期和时间的刻度数,Ticks字段的类型是long,可以使用以下方法获取当前时间的Ticks值:

DateTime currentTime = DateTime.UtcNow;
long currentTicks = currentTime.ToUniversalTime().Ticks;

1、2 Days字段

Days字段表示时间间隔的天数,它的值范围是-365天到365天,可以使用以下方法获取指定时间间隔的天数:

TimeSpan timeInterval = new TimeSpan(1, 0, 0); // 表示1天的间隔
int days = (int)timeInterval.TotalDays; // 结果为1

1、3 Milliseconds字段

Milliseconds字段表示时间间隔的毫秒数,它的值范围是-999999到999999,可以使用以下方法获取指定时间间隔的毫秒数:

TimeSpan timeInterval = new TimeSpan(0, 0, 1); // 表示1毫秒的间隔
int milliseconds = timeInterval.TotalMilliseconds; // 结果为1

TimeSpan常用方法

2、1 Add()方法

Add()方法用于将指定的时间间隔添加到当前时间间隔,返回一个新的TimeSpan对象,要计算两个时间间隔之间的天数差,可以使用以下代码:

TimeSpan interval1 = new TimeSpan(2, 0, 0); // 表示2天的间隔
TimeSpan interval2 = new TimeSpan(3, 0, 0); // 表示3天的间隔
TimeSpan result = interval1.Add(interval2); // 结果为5天的时间间隔

2、2 Subtract()方法

Subtract()方法用于从当前时间间隔中减去指定的时间间隔,返回一个新的TimeSpan对象,要计算两个时间间隔之间的天数差,可以使用以下代码:

TimeSpan interval1 = new TimeSpan(2, 0, 0); // 表示2天的间隔
TimeSpan interval2 = new TimeSpan(3, 0, 0); // 表示3天的间隔
TimeSpan result = interval1.Subtract(interval2); // 结果为-1天的时间间隔(即前一天)

2、3 Duration()方法

Duration()方法用于计算两个时间点之间的时间间隔,返回一个Duration对象,要计算两个日期之间的天数差,可以使用以下代码:

DateTime date1 = new DateTime(2022, 1, 1); // 表示2022年1月1日的日期
DateTime date2 = new DateTime(2022, 1, 3); // 表示2022年1月3日的日期
Duration duration = date2.Subtract(date1).Duration(); // 结果为2天的时间间隔(即两个日期之间相差两天)

TimeSpan与时间戳的转换

3、1 ToDateTime()方法和FromDateTime()方法

ToDateTime()方法用于将TimeSpan对象转换为DateTime对象,返回一个新的DateTime对象。

TimeSpan timeInterval = new TimeSpan(1, 0, 0); // 表示1天的间隔
DateTime dateTime = timeInterval.ToDateTime(); // 结果为当前日期加上1天后的日期(即下一天)

FromDateTime()方法用于将DateTime对象转换为TimeSpan对象,返回一个新的TimeSpan对象。

DateTime dateTime = new DateTime(2022, 1, 3); // 表示2022年1月3日的日期和时间
TimeSpan timeInterval = TimeSpan.FromDateTime(dateTime); // 结果为从2022年1月3日开始的时间间隔(即3天的时间间隔)

3、2 TotalHours()和TotalMinutes()方法和TotalSeconds()方法以及TotalDays()、TotalMilliseconds和TotalTicks方法

以上提到的方法分别用于获取TimeSpan对象的总小时数、总分钟数、总秒数、总天数、总毫秒数和总刻度数。

TimeSpan timeInterval = new TimeSpan(1, 30, 45); // 表示1小时30分钟45秒的时间间隔
int totalHours = (int)timeInterval.TotalHours; // 结果为1 + (30/60) + (45/3600) = 4小时45分钟45秒(向下取整)
int totalMinutes = timeInterval.TotalMinutes; // 结果为95分钟(向下取整)
double totalSeconds = timeInterval.TotalSeconds; // 结果为5455.0秒(向下取整)
int totalDays = (int)timeInterval.TotalDays; // 结果为1天(向下取整)
int totalMilliseconds = timeInterval.TotalMilliseconds; // 结果为95455毫秒(向下取整)
long totalTicks = timeInterval.TotalTicks; // 结果为864000000000 ticks + (3600*95 + 45)*ticks/second + (45*5) ticks/minute + (45*45) ticks/hour + (45*45*6) ticks/day + (45*45*6*7*8) ticks/week + (45*45*6*7*8*9) ticks/month + (45*45*6*7*8*9*10) ticks/year + (45*45*6*7*8*9*10*11) ticks/decade + (45*45*6*7*8*9*10*11*12) ticks/century + (45*45*6*7*8*9*10*11*12*13) ticks/millennium + (45*45*6*7*8*9*10*11*12*13*14) ticks/eon + (45*45*6*7*8*9*10*11*12*13*14*15) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大) ticks/eon + ... (无穷大)tick
0