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

news2025/5/24 0:44:19

说明:本文记录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进行比较,如下图所示,它接收两个日期参数

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言期末】基于VS2022的学生成绩管理系统

诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R&#xff0c;如有需要请私信我&#xff0c;或者加我的企鹅号&#xff1a;1404293476 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88702521https://download.csd…

Spring Cloud Config相关面试题及答案(2024)

1、什么是 Spring Cloud Config&#xff0c;它解决了哪些问题&#xff1f; Spring Cloud Config 是一个为微服务架构提供集中化外部配置支持的项目。它是构建在 Spring Cloud 生态系统之上&#xff0c;利用 Spring Boot 的开发便利性&#xff0c;简化了分布式系统中的配置管理…

LCR 174. 寻找二叉搜索树中的目标节点

解题思路&#xff1a; 二叉搜索树一般采用中序遍历&#xff08;从小到大排列&#xff09;。 class Solution {int res, cnt;public int findTargetNode(TreeNode root, int cnt) {this.cnt cnt;dfs(root);return res;}void dfs(TreeNode root) {if(root null) return;dfs(ro…

利用蚁剑钓鱼上线CS

前言 ​ 中国蚁剑使用Electron构建客户端软件&#xff0c;Electron实现上用的是Node.js&#xff0c;并且Node.js能执行系统命令&#xff0c;故可以利用蚁剑的webshell页面嵌入js来直接执行命令&#xff0c;进而钓鱼来上线CS。&#xff08;类似Goby&#xff0c;Goby也是使用Ele…

Vue2 - diff 原理(动图演示)

目录 1&#xff0c;diffdiff 的时间点 2&#xff0c;_update 函数3&#xff0c;_patch 函数&#xff08;进行 diff&#xff09;3.1&#xff0c;根节点比较3.2&#xff0c;子节点比较 4&#xff0c;key的问题举例1举例2 1&#xff0c;diff 解释&#xff1a;对比新旧虚拟DOM树&a…

杨中科 ASP.NETCore开发效率利器 HOT RELOAD

HOT RELOAD 1、困惑:修改了服务器端的代码&#xff0c;必须重新运行程序。 2、方法1: [启动 (不调试) ] 3、方法2: .NET 6开始的Hot Reload(热重载) 正常修改代码后 不重启&#xff0c;是无法看到新的数据展示在页面 修改 运行结果&#xff1a; 方式一&#xff1a;设置开始…

excel 插件:Rainbow Analyst Crack

一个插件中包含四种 EXCEL 审核工具检测并修复隐藏的电子表格错误 不要满足于更少&#xff0c;四种领先的电子表格审计工具合二为一 Rainbow Analyst&#xff08;因其对颜色编码的独特强大使用而得名&#xff09;结合了世界级电子表格审核功能的多个领域&#xff1a; Excel™ …

ASP.NET Core高级之认证与授权(一)--JWT入门-颁发、验证令牌

阅读本文你的收获 了解认证和授权的作用了解在ASP.NET Core中实现身份认证的技术都有哪些学习基于JWT认证并学会颁发和验证JWT令牌 一、重要的前置概念 在一个系统中&#xff0c;不是所有的功能和资源都能够被自由地访问&#xff0c;比如你存在银行系统里面的资金&#xff0c…

Rust 圣经 阅读 字符、布尔、单元类型

字符类型&#xff08;char&#xff09; Rust 的字符不仅仅是 ASCII &#xff0c;还包含所有的 Unicode 值&#xff0c;包括单个的中文、日文、表情符号等等。 Unicode 值的范围从 U0000 ~ UD7FF 和 UE000 ~ U10FFFF。 因为每个 Unicode 都是 4 个字节编码&#xff0c;所以字符…

Mybatis之多表查询

目录 一、简介 1、使用嵌套查询: 2、使用多个 SQL 语句&#xff1a; 3、使用关联查询&#xff1a; 4、使用自定义映射查询&#xff1a; 二、业务场景 三、示例 1、一对一查询 2、一对多查询 一、简介 MyBatis 是一个优秀的持久层框架&#xff0c;它提供了强大的支持来执…

向日葵远程工具的使用Mysql5.7的安装与配置

目录 一、向日葵远程安装与使用 二、Mysql 5.7 安装与配置 2.1 安装 2.2 Navicat Premium 12 测试连接 本机测试连接 外部访问MySQL测试连接 三、思维导图 一、向日葵远程安装与使用 简介&#xff1a; 向日葵远程控制是一款用于对远程PC进行管理和服务的软件,拥有5秒快速…

二阶偏导数(隐函数)

定义&#xff0c;方法 一般型 复杂型

如何修复 SQL Server 数据库中的恢复挂起状态?

当我们想与关系数据库交互时&#xff0c;SQL 就会出现并帮助用户与数据库进行交互。SQL 从高级语言中获取用户的输入&#xff0c;然后访问将代码转换为机器可理解的形式。SQL 确实会恢复数据库文件&#xff0c;但有时 SQL 服务器恢复暂挂阶段会进入帐户&#xff0c;这会停止恢复…

海外数据中心代理与住宅代理:优缺点全面对比

数据中心代理和住宅代理是为了匿名而开发的&#xff0c;通过替换网站眼中您自己的 IP 地址。然而&#xff0c;它们在价格、功能、性能或最佳用例方面存在一些差异。那么&#xff0c;这些代理类型到底有什么相似点和不同点呢&#xff1f; 一、什么是数据中心代理&#xff1f; 1…

Hive用户自定义函数之UDF开发

在进行大数据分析或者开发的时候&#xff0c;难免用到Hive进行数据查询分析&#xff0c;Hive内置很多函数&#xff0c;但是会有一部分需求需要自己开发&#xff0c;这个时候就需要自定义函数了&#xff0c;Hive的自定义函数开发非常方便&#xff0c;今天首先讲一下UDF的入门开发…

人工智能大模型:定义、发展和应用

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

【基础python】条件语句 | 循环

条件语句 if elif else python中和绝大数语言类似&#xff0c;具有能够判断语句顺序的语法 if elif else 分别对应C的 if else if else if 条件为真进入语句 &#xff0c;反之则不进入 如果if 为假&#xff0c;存在else 则会进入else 如果if 为假 &#xff0c;存在…

数据库分区分表

分区分表 为什么要分库分表 软件时代&#xff0c;传统应用都有这样一个特点&#xff1a;访问量、数据量都比较小&#xff0c;单库单表都完全可以支撑整个业务。随着互联网的发展和用户规模的迅速扩大&#xff0c;对系统的要求也越来越高。因此传统的MySQL单库单表架构的性能问…

探索 Vue 实例方法的魅力:提升 Vue 开发技能(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…