C#: 和时间相关,延时、获取系统时间、时间格式转换、定时器 等

说明:本文记录C# 和时间相关,延时、获取系统时间、时间格式转换、定时器 等,应用和代码。

1.延时函数

System.Threading.Thread.Sleep(20); //毫秒

1.1 主线程不卡延时函数

/* 主线程不卡延时函数 */

public static void Delay_ms(int milliSecond)
{
    int start = Environment.TickCount;
    while (Math.Abs(Environment.TickCount - start) < milliSecond)
    {
        Application.DoEvents();
    }
}


/* 主线程不卡延时函数 */
public static bool Delay_s(int delayTime)
{
    DateTime now = DateTime.Now;
    int s;
    do
    {
        TimeSpan spand = DateTime.Now - now;
        s = spand.Seconds;
        Application.DoEvents();
    }
    while (s < delayTime);
    return true;
}

1.2 阻塞式精确延时函数,单位ms

说明:Thread.Sleep(); 这函数延时并不准确,比如在10毫秒以内,这个函数本身的执行就要耗时10ms左右,所以在需要精确的 几十毫秒的延时可以用以下函数。

/* 阻塞式精确延时函数,单位ms */
public bool Dalay(int ms)
{
    DateTime now = DateTime.Now;
    int s;
    do
    {
        TimeSpan spand = DateTime.Now - now;
        s = spand.Minutes * 60 * 1000 + spand.Seconds * 1000 + spand.Milliseconds;
        Application.DoEvents();
    }
    while (s < ms);
    return true;
}

1.3 微秒延时

/*
功能:微秒延时(1000us == 1ms)
参数:延时时间单位ms
延时5us:delayUs(0.005);
*/
public static double DelayUs(double time)
{
    System.Diagnostics.Stopwatch stopTime = new System.Diagnostics.Stopwatch();

    stopTime.Start();
    while (stopTime.Elapsed.TotalMilliseconds < time) { }
    stopTime.Stop();

    return stopTime.Elapsed.TotalMilliseconds;
}

1.4 其他延时代码

        这些是一些常见的延时代码实现方式,你可以根据具体需求选择适合的方法。请注意,使用延时时应避免在主线程中使用 Thread.Sleep() 方法,以免阻塞 UI 界面的响应。

在 C# 中,有多种实现延时的方式。下面列举了一些常用的延时代码示例:
1.使用 Thread.Sleep() 方法:
using System.Threading;
// 休眠 1 秒
Thread.Sleep(1000);


2.使用 Task.Delay() 方法:
using System.Threading.Tasks;
// 异步延时 1 秒
await Task.Delay(1000);


3.使用 Timer 类:
using System.Threading;
// 创建一个 Timer 对象,延时 1 秒后执行指定的方法
Timer timer = new Timer(MyMethod, null, 1000, Timeout.Infinite);
// 定义要执行的方法
private static void MyMethod(object state)
{
    // 这里放需要执行的代码
}


4.使用 Stopwatch 类:
using System.Diagnostics;
// 创建 Stopwatch 对象并启动计时
Stopwatch stopwatch = Stopwatch.StartNew();
// 延时 1 秒
while (stopwatch.ElapsedMilliseconds < 1000)
{
    // 等待
}
// 停止计时器
stopwatch.Stop();

2. 获取系统时间

long tick_time;

DateTime time = new DateTime();      /* 定义一个Datatime 变量并初始化 */
time = DateTime.Now;                 /* 获取当前时间,赋值给一个Datatime 变量 */
tick_time = DateTime.Now.Second;     /* 获取当前时间的秒的数值 0-59 */
tick_time = DateTime.Now.Millisecond;/* 获取当前时间的毫秒 */
tick_time = DateTime.Now.Ticks;      /* 获取tick ,得到的值是自公历 0001-01-01 00:00:00:000 至此的以 100 ns(即 1/10000 ms)为单位的时间数。 */

int hour = DateTime.Now.Hour;        /* 获取当前时间的小时 */
int minute = DateTime.Now.Minute;    /* 获取当前时间的分钟 */

//label158.Text = "更新时间:" + time.ToString();    /* 把时间变量转换为字符串格式赋值给一个标签用于显示转换后 2022/09/27 13:51:30 */
label158.Text = "更新时间:" + tick_time.ToString();    /* 把时间变量转换为字符串格式赋值给一个标签用于显示转换后 2022/09/27 13:51:30 */

3. 定时器

3.1 定时器添加

        双击窗口中添加号的定时器控件,可以进入对应的代码区域,添加具体的需要根据定时器运行的相关代码。

3.2 定时器的使能和失能

timer_rec.Enabled = m_bOpen==1?true:false;
/* 定时器根据 m_bOpen 的值来使能或者失能 */
timer_send.Stop();    /* 定时器停止 */
timer_send.Start();   /* 定时器启动 */

4. Stopwatch 计算代码运行时间

1、什么是Stopwatch

        Stopwatch:提供一组方法和属性,可以准确的测量运行时间。使用的时候需要引用命名空间:System.Diagnostics。

2、Stopwatch的简单使用

//创建Stopwatch实例
Stopwatch sw = new Stopwatch();
//开始计时
sw.Start();
for (int i = 0; i < 100; i++)
{
  Console.WriteLine(i);
}
//停止计时
sw.Stop();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//重置 停止时间间隔测量,并将运行时间重置为0
sw.Reset();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//重启 停止时间间隔测量,并将运行时间重置为0,然后重新开始测量运行时间
sw.Restart();
for (int i = 0; i < 100; i++)
{
  Console.WriteLine(i);
}
sw.Stop();
//获取当前实例测量得出的总运行时间(以毫秒为单位)
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//获取当前实例测量得出的总运行时间
Console.WriteLine("用时:"+sw.Elapsed); 
//获取当前实例测量得出的总运行时间(用计时器刻度表示)。
Console.WriteLine(sw.ElapsedTicks);
Console.Read();
//使用StartNew,相当于已经实例化并且启动计时
Stopwatch sw=Stopwatch.StartNew();
for (int i = 0; i < 100; i++)
{
  Console.WriteLine(i);
}
sw.Stop();
//获取当前实例测量得出的总运行时间(以毫秒为单位)
Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "");
//获取当前实例测量得出的总运行时间
Console.WriteLine("用时:"+sw.Elapsed); 
Console.Read();

5. 秒转换为 时分秒格式字符串


/* 输入参数 秒 返回时分秒的字符串*/
private string Seconds_To_HMS(long totalTime)
{
	string date = string.Empty;
	var seconds = (int)(totalTime % 60);
	var minutes = (int)(totalTime / 60) % 60;
	//var hours = (int)(totalTime / 3600) % 60;  /* 最多显示60小时 */
	var hours = (int)(totalTime / 3600);
	date = string.Format("{0:00}{1:00}{2:00}", hours + ":", minutes + ":", seconds + "s");
	return date;
}

6. C# 只改变一个给定日期时间 的时间部分

举例:比如给定一个日期时间为:2022-03-30 08:00:00
现在要改成:2022-03-30 12:30:28
代码如下:

DateTime time = new DateTime(2022, 3, 30, 8, 0, 0);   //2022/3/30 8:00:00
DateTime tt=time.Date.Add(new TimeSpan(12, 30, 28));  //2022/3/30 12:30:28
DateTime n = time.Date + new TimeSpan(12, 30, 28);    //2022/3/30 12:30:28
如果需求是在这个时间基础上加 12小时30分28秒

如果需求是在这个时间基础上加 12小时30分28秒

DateTime newTime = time.Add(new TimeSpan(12, 30, 28)); // 2022/3/30 20:30:28

7. C#比较日期的方法总结

参考:C#比较日期的方法总结_C#教程_脚本之家

        开始通过DateTime中的Compare进行比较,如下图所示,它接收两个日期参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/300445.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「斗破年番」5位斗宗大战,韩枫献海心焰晋斗宗,菩提涎争夺开战

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《斗破苍穹年番》第78期超前爆料&#xff0c;本期透露菩提化体涎的背后秘密。天鹰老人抢夺菩提化体涎后&#xff0c;迅速逃匿&#xff0c;却遭到了各路强者的围攻。然而&#xff0c;这位四星斗宗强者并非浪得虚名&#xff0c;他仅…

Defi安全-Monox攻击事件Foundry复现

其它相关内容可见个人主页 Mono攻击事件的介绍见&#xff1a;Defi安全–Monox攻击事件分析–phalconetherscan 1. 前情提要和思路介绍 Monox使用单边池模型&#xff0c;创建的是代币-vCash交易对&#xff0c;添加流动性时&#xff0c;只需添加代币&#xff0c;即可进行任意代…

Docker常用命令Docker命令 docker常用命令

Docker常用命令Docker命令 docker常用命令 Docker常用命令Docker命令 docker常用命令1、拉取镜像2、查看镜像列表3、run命令帮助信息3.1、创建容器并且运行, 最基本的创建运行3.2、创建容器并且运行, 容器端口绑定宿主机端口3.3、创建容器并且运行, 启动容器传递参数3.4、创建容…

Vue3 结合typescript 组合式函数(1)

在App.vue文件中 实现鼠标点击文件&#xff0c;显示坐标值 第一种方法 第二种方法&#xff1a;组合式函数 结果&#xff1a; 官网推荐组合函数&#xff1a;https://vueuse.org

【linux学习笔记】网络

目录 【linux学习笔记】网络检查、监测网络ping-向网络主机发送特殊数据包traceroute-跟踪网络数据包的传输路径netstat-检查网络设置及相关统计数据 【linux学习笔记】网络 检查、监测网络 ping-向网络主机发送特殊数据包 最基本的网络连接命令就是ping命令。ping命令会向指…

初识Linux shell

Linux初探 Linux系统可以划分为4个部分&#xff1a; Linux内核&#xff1a;Linux系统的核心&#xff0c;控制着系统的所有硬件和软件&#xff0c;在必要时分配硬件&#xff0c;并根据需要执行软件。 内核主要功能&#xff1a; 系统内存管理&#xff1a;内核通过硬件上称为交换…

Java项目:108SSM教务管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 教务管理系统基于SpringSpringMVCMybatis开发&#xff0c;功能和学生成绩管理系统&#xff0c;学生选课管理系统类似&#xff0c;也可以做学生成绩管理系统…

探寻能源未来瞩目储能科技-2024武汉储能产业博览会定挡8月

探寻能源未来瞩目储能科技-2024武汉储能产业博览会定挡8月 2024武汉国际储能产业博览会 同期举办&#xff1a;2024世界汽车制造技术暨智能装备博览会 时间&#xff1a;2024.8.14-16 地点&#xff1a;武汉国际博览中心 邀请函 主办单位&#xff1a;湖北省汽车行业协会、湖…

快速掌握Postman实现接口测试

快速掌握Postman实现接口测试 Postman简介 Postman是谷歌开发的一款网页调试和接口测试工具&#xff0c;能够发送任何类型的http请求&#xff0c;支持GET/PUT/POST/DELETE等方法。Postman非常简单易用&#xff0c;可以直接填写URL&#xff0c;header&#xff0c;body等就可以发…

PiflowX组件-ReadFromUpsertKafka

ReadFromUpsertKafka组件 组件说明 upsert方式从Kafka topic中读取数据。 计算引擎 flink 有界性 Unbounded 组件分组 kafka 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_hostKAFKA_HO…

OpenSource - 基于Netty的网络扩展库HServer

文章目录 概述官网Hserver的理念特点原理图代码案例HelloWorld 概述 HServer是一个基于Netty开发网络扩展库.使用插件方式来扩展我们的业务 HServer提供 web,gateway,rpc 等插件 同时用户也可以自定义插件&#xff0c;来完成各种各样的业务场景。 官网 https://gitee.com/HSe…

计算机毕业设计 | SpringBoot+vue移动端音乐网站 音乐播放器(附源码)

1&#xff0c;项目背景 随着计算机技术的发展&#xff0c;网络技术对我们生活和工作显得越来越重要&#xff0c;特别是现在信息高度发达的今天&#xff0c;人们对最新信息的需求和发布迫切的需要及时性。为了满足不同人们对网络需求&#xff0c;各种特色&#xff0c;各种主题的…

一文带你弄懂 V8 数组的快速 / 字典模式

V8 是如何处理数组的&#xff1f; 问题 先抛出一个问题&#xff0c;下面两端代码哪个的效率更高&#xff1f; const arr []; for(let i 0; i < 10000000; i) {arr[i] 1; }const arr []; arr[10000000 - 1] 1; for(let i 0; i < 10000000; i) {arr[i] 1; }答案是…

一文搞定通过UTM 在MAC M1上安装Win11

Why 临近过年&#xff0c;一年一度的抢票大战就要开始。抢票软件要求安装在windows&#xff0c;作为mac资深用户&#xff0c;必须安装个windows虚拟机。 How step by step: follow YouTube。具体step follow YouTube 视频。本文&#xff0c;只说一下&#xff0c;特别容易错…

Unity中Shader面片一直面向摄像机(个性化修改及适配BRP)

文章目录 前言一、个性化修改面向摄像机效果1、把上一篇文章中求的 Z轴基向量 投影到 XoZ平面上2、其余步骤和之前的一致3、在属性面板定义一个变量&#xff0c;控制面片面向摄像机的类型4、效果 二、适配BRP三、最终代码 前言 在上一篇文章中&#xff0c;我们用Shader实现了面…

1.7 day5 IO进程线程

互斥锁 #include <myhead.h> char buf[128];//创建临界资源 pthread_mutex_t mutex;//创建锁 void *task(void *arg)//分支线程 {while(1){pthread_mutex_lock(&mutex);//上锁printf("分支线程:buf%s\n",buf);strcpy(buf,"I Love China");pthre…

mysql基础-表数据操作之查

目录 1.别名 2. 单表查询 2.1 模糊查询 - like 2.2 limit 2.3 order by 2.4 group by 2.5 in 2.6 between and 2.6 is null 2.7 not 2.8 运算符 3. 联表查询 全连接 左连接 右连接 本次分享一下数据的DQL语言。 1.别名 首先分享一下别名的知识。我们在查询的时…

【创建VirtualBox虚拟机并安装openEuler20.03 TLS SP1操作系统】

创建VirtualBox虚拟机并安装openEuler20.03 TLS SP1操作系统 一、环境说明二、安装过程 一、环境说明 虚拟机软件&#xff1a;Virtualbox操作系统&#xff1a;openEuler 20.03 TLS SP1&#xff08;x86&#xff09; 二、安装过程 创新虚拟机 修改虚拟机配置&#xff1a; …

MySQL复习汇总(图书管理系统)

MySQL图书管理系统&#xff08;49-94&#xff09;源码_71.备份book数据库到e盘的mybook.sql文件(备份文件中要求包含建库命令)-CSDN博客 -- 1、 创建一个名称为book的数据库。 -- 2、 打开book数据库 -- 3、 创建数据表分别如下&#xff08;除外键之外&#xff09;…

IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

第1步&#xff1a;新建一个SpringBoot 项目 作为 父工程 [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件&#xff0c;最终只留 .gitignore 和 pom.xml 第2步&#xff1a;创建 子maven模块 第3步&#xff1a;整理 父 pom 文件 ① …