【C#】TimeSpan

news/2024/7/7 20:34:08

文章目录

  • 概述
  • 属性
  • 时间计算
  • 拓展
  • 来源

概述

TimeSpan结构:表示一个时间间隔。
它含有以下四个构造函数:

  1. TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。(DateTime.Tick:是计算机的一个计时周期,单位是一百纳秒,即一千万分之一秒)

  2. TimeSpan(Int32, Int32, Int32)将 TimeSpan结构的新实例初始化为指定的小时数、分钟数和秒数。

  3. TimeSpan(Int32, Int32, Int32, Int32)将
    TimeSpan结构的新实例初始化为指定的天数、小时数、分钟数和秒数。

  4. 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 ,请看下面代码

   // 毫秒转 TimeSpan
   var milliseconds = 5 * 1000;
   var time = TimeSpan.FromMilliseconds(milliseconds);

   // TimeSpan 转 毫秒
   milliseconds =(int) time.TotalMilliseconds;

因为从秒转毫秒的值是 double 需要进行转换,如果使用 int 转换有时会越界,建议使用下面代码

   // 毫秒转 TimeSpan
   long 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 结构


http://lihuaxi.xjx100.cn/news/1908140.html

相关文章

前端学习——关于前端框架的思考

前端框架 我们知道在AngularJS&#xff0c;react&#xff0c;vue等前端框架出现之前&#xff0c;前端开发都是通过js直接操作dom树来实现的&#xff0c;而有了前端框架之后&#xff0c;前端开发基本上不需要在直接操作dom树&#xff0c;相当于在原生html的dom树之间和前端程序…

【SpringBoot实战】基于阿里云实现文件上传

【SpringBoot实战】基于阿里云实现文件上传 在实际项目开发中&#xff0c;不可避免地会使用到阿里云OSS进行文件存储。尽管阿里云有详细的开发文档&#xff0c;但本篇博客的目的是让我们能够用简明的代码快速实现这个功能。 引入依赖 <dependencies><!-- 阿里云oss…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…

web前端javaScript笔记——(5)原型对象和垃圾回收

原型对象 原型对象prototype 我们所创建的每一个函数&#xff0c;机械其都会向函数中添加一个属性prototype 这个属性对应着一个对象&#xff0c;这个对象就是我们所谓的原型对象 function Person(){} console.log(Person.prototype);//Object 如果函数作为普通函数调用pr…

Electron训练笔记

终端乱码解决办法&#xff1a;更改编号下载卡住解决办法&#xff1a;Electron RequestError: connect ETIMEDOUT 20.205.243.166:443electron本质是一个依赖库&#xff0c;改依赖库提供了部分对象&#xff0c;可以实现对于window的调用。electron有一个主进程&#xff0c;多个渲…

【华为OD机试真题2023CD卷 JAVAJS】机器人仓库搬砖

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 机器人仓库搬砖 知识点二分查找字符串编程基础数组 题目描述:机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头,要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格,机器人一…

PostgresSQL锁表后通过pid杀死进程即可解决

依次执行下面语句即可&#xff1a; select oid from pg_class where relname ‘green_land_vegetation’ – 根据表获取oid select * from pg_locks where relation ‘133077’ – 根据oid获取pid select pg_terminate_backend(输入第2条查询到的pid&#xff0c;多个pid则一个…

Hive执行计划

Hive提供了explain命令来展示一个查询的执行计划&#xff0c;这个执行计划对于我们了解底层原理&#xff0c;Hive 调优&#xff0c;排查数据倾斜等很有帮助。 使用语法如下&#xff1a; explain query;在 hive cli 中输入以下命令(hive 2.3.7)&#xff1a; explain select s…