C#使用TimeSpan时间计算的简单实现

作者:lindexi 时间:2023-10-06 07:25:55 

本文告诉大家简单的方法进行时间计算。

实际上使用 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("考试时间到,系统将强行交卷");//提示时间到,下面可以加你想要的操作
     }
   }

一个简单的倒计时器就这样完成了,嘿嘿,不看不知道,一看很简单呀

来源:https://lindexi.gitee.io/lindexi/post/C-TimeSpan-时间计算.html

标签:c#,timespan,时间
0
投稿

猜你喜欢

  • Java8时间接口LocalDateTime详细用法

    2023-11-25 09:56:49
  • 详解Java中restTemplate的使用

    2023-06-19 23:20:29
  • 用C#编写ActiveX控件(三)

    2023-03-26 12:35:10
  • Android编程开发之Spinner组件用法

    2022-09-02 17:55:26
  • 使用java实现http多线程断点下载文件(一)

    2023-11-23 15:45:51
  • Android之复选框对话框用法实例分析

    2023-10-03 05:07:03
  • C# 通过NI-VISA操作Tektronix TBS 2000B系列示波器的实现步骤

    2023-11-02 01:44:38
  • C#找不到类型名"SqlConnection"的有效解决方法

    2022-05-10 09:47:26
  • Android webView字体突然变小的原因及解决

    2022-01-02 23:39:08
  • java实现微信红包 拼手气红包

    2023-09-28 10:31:45
  • 浅谈Android Studio JNI生成so库

    2021-09-25 21:55:11
  • Android 消息队列模型详解及实例

    2023-04-06 10:49:43
  • C#调用易语言写的Dll文件方法

    2023-07-21 01:56:10
  • 详解Spring MVC CORS 跨域

    2023-11-25 08:04:37
  • SpringBoot 如何从配置文件读取值到对象中

    2023-10-13 15:43:15
  • 聊聊java 过滤器、监听器、拦截器的区别(终结篇)

    2021-10-10 14:54:51
  • Eclipse转Itellij IDEA导入Git/svn本地项目的详细步骤

    2021-11-06 12:57:10
  • MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

    2023-11-29 05:02:37
  • java 如何计算同比增长工具类

    2023-11-09 08:50:35
  • Springboot自带定时任务实现动态配置Cron参数方式

    2023-11-10 10:21:31
  • asp之家 软件编程 m.aspxhome.com