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
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/169054.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复