文章目录
- 概述
- 属性
- 时间计算
- 拓展
- 来源
概述
TimeSpan结构:表示一个时间间隔。
它含有以下四个构造函数:
-
TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。(DateTime.Tick:是计算机的一个计时周期,单位是一百纳秒,即一千万分之一秒)
-
TimeSpan(Int32, Int32, Int32)将 TimeSpan结构的新实例初始化为指定的小时数、分钟数和秒数。
-
TimeSpan(Int32, Int32, Int32, Int32)将
TimeSpan结构的新实例初始化为指定的天数、小时数、分钟数和秒数。 -
TimeSpan(Int32,Int3效果为:2, Int32, Int32, Int32)将新的
TimeSpan结构初始化为指定的天数、小时数、分钟数、秒数和毫秒数。
据微软文档,TimeSpan刻度单位为100ns
TimeSpan格式为:天.时:分:秒.百纳秒
单位格式:day.hour:minute:second.100ns
格式示例:0.0:0:0.0000000
属性
Days | 获取当前 TimeSpan 结构所表示的时间间隔的天数部分。 |
---|---|
Hours | 获取当前 TimeSpan 结构所表示的时间间隔的小时数部分。 |
Milliseconds | 获取当前 TimeSpan 结构所表示的时间间隔的毫秒数部分。 |
Minutes | 获取当前 TimeSpan 结构所表示的时间间隔的分钟数部分。 |
Seconds | 获取当前 TimeSpan 结构所表示的时间间隔的秒数部分。 |
Ticks | 获取表示当前 TimeSpan 结构的值的刻度数。 |
TotalDays | 获取以整天数和天的小数部分表示的当前 TimeSpan 结构的值。 |
TotalHours | 获取以整小时数和小时的小数部分表示的当前 TimeSpan 结构的值。 |
TotalMilliseconds | 获取以整毫秒数和毫秒的小数部分表示的当前 TimeSpan 结构的值。 |
TotalMinutes | 获取以整分钟数和分钟的小数部分表示的当前 TimeSpan 结构的值。 |
TotalSeconds | 获取以整秒数和秒的小数部分表示的当前 TimeSpan 结构的值。 |
时间计算
例如我使用下面的代码表示 5 秒
const int needCount = 5 * 1000;
因为后面使用的是延迟,延迟的代码很简单
Task.Delay(needCount)
这时传入的是一个毫秒,但是很多小伙伴问,为什么是 5*1000 表示 5秒,他不知道我使用的是毫秒。
所以建议使用 TimeSpan 来写时间,下面的需求是在判断在开机 20 秒内的延迟,如果在开机 20 秒内启动应用,那么就需要延迟时间
var needTime = TimeSpan.FromSeconds(20); //开机20秒左右 USB 已经加载完成
计算时间的减法或加法可以使用重载+和-,请看下面代码,就是把两个 TimeSpan 相减,返回的值也是一个 TimeSpan ,下面的代码是编译不通过的。
var chikesereHearpawwirboo = needTime - maxDelay;Console.WriteLine(chikesereHearpawwirboo);
如果需要从毫秒转 TimeSpan ,请看下面代码
// 毫秒转 TimeSpanvar milliseconds = 5 * 1000;var time = TimeSpan.FromMilliseconds(milliseconds);// TimeSpan 转 毫秒milliseconds =(int) time.TotalMilliseconds;
因为从秒转毫秒的值是 double 需要进行转换,如果使用 int 转换有时会越界,建议使用下面代码
// 毫秒转 TimeSpanlong milliseconds = 5 * 1000;var time = TimeSpan.FromMilliseconds(milliseconds);// TimeSpan 转 毫秒milliseconds = (long) Math.Ceiling(time.TotalMilliseconds);
这个计算适合在有天数和小时等的计算,如计算 1天 减去 3h10m 有多少毫秒,如果不使用 TimeSpan 自己重写,还是需要写很多代码
var time = TimeSpan.FromDays(1);var cut = new TimeSpan(0, 3, 10, 0);var milliseconds = (long)(time - cut).TotalMilliseconds;
尝试不使用 TimeSpan 想想需要怎么写
C#使用timespan和timer完成一个简单的倒计时器
首先利用timespan数据类型这样构造:
TimeSpan ts = new TimeSpan(0, 45, 0);
这样就声明了一个长度为45分钟的时间段,其中构造函数参数的含义:
TimeSpan(hour,minute,second);
然后拖进去一个timer,叫timer1
timer1.Interval=1000;
设置一秒一个周期
在timer的tick事件里面这样写:
private
void timer1_Tick(object
sender, EventArgs e){String str = ts.Hours.ToString() + ":"
+ ts.Minutes.ToString() + ":"
+ ts.Seconds.ToString();label17.Text = str;//label17用来显示剩余的时间ts = ts.Subtract(new
TimeSpan(0, 0, 1));//每隔一秒减去一秒if
(ts.TotalSeconds < 0.0)//当倒计时完毕{timer1.Enabled = false;MessageBox.Show("考试时间到,系统将强行交卷");//提示时间到,下面可以加你想要的操作}}
拓展
皮秒,符号ps(英语:picosecond ).
1皮秒等于一万亿分之一秒(10-12秒)
1,000 皮秒 = 1纳秒
1,000,000 皮秒 = 1微秒
1,000,000,000 皮秒 = 1毫秒
1,000,000,000,000 皮秒 = 1秒
纳秒,符号ns(英语:nanosecond ).
1纳秒等于十亿分之一秒(10-9秒)
1 纳秒 = 1000皮秒
1,000 纳秒 = 1微秒
1,000,000 纳秒 = 1毫秒
1,000,000,000 纳秒 = 1秒
微秒,符号μs(英语:microsecond ).
1微秒等于一百万分之一秒(10-6秒)
0.000 001 微秒 = 1皮秒
0.001 微秒 = 1纳秒
1,000 微秒 = 1毫秒
1,000,000 微秒 = 1秒
毫秒,符号ms(英语:millisecond ).
1毫秒等于一千分之一秒(10-3秒)
0.000 000 001 毫秒 = 1皮秒
0.000 001 毫秒 = 1纳秒
0.001 毫秒 = 1微秒
1000 毫秒 = 1秒
最好我测试出来结果是
timespan s=00:00:00.0008025
转换成Milliseconds ms=0.8025毫秒。
来源
C#使用TimeSpan时间计算 C#使用TimeSpan时间计算的简单实现
C# Stopwatch与TimeSpan详解
C#的TimeSpan
TimeSpan 结构