C#使用DateTime.Now静态属性动态获得系统当前日期和时间
目录
一、实例
1.源码
2.生成效果
二、相关知识点
1.Thread类
(1)Thread.Sleep()方法
(2)Thread(ThreadStart)
(3)IsBackground
(4)Invoke( )
2.CreateGraphics()
3.DateTime.Now
4.(MethodInvoker)delegate ()
使用DateTime结构的Now静态属性可以轻松地获取当前系统时间。
DateTime结构的Now静态属性只是得到一个系统时间对象,该时间对象不会随着系统时间的变化而变化,如果要动态显示系统时间,可以使用计时器间隔地获取系统时间对象并显示。
可以适当地使用线程替代Timer控件。在窗体应用程序开发过程中,应当尽量避免使用窗体线程做高强度的运算或IO操作,如果窗体线程参与了过多的运算,会导致用户的操作不能及时分配到资源,用户界面会出现卡或无响应情况。
一、实例
1.源码
//使用DateTime的Now静态属性动态获取系统时间
namespace _053
{public partial class Form1 : Form{public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){SuspendLayout();// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(394, 41);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "动态获取系统时间"; ResumeLayout(false);Thread thread = new(//创建线程() => //使用lambda表达式{while (true) //无限循环{Invoke( //操作窗体线程(MethodInvoker)delegate ()//使用匿名方法{Refresh();//刷新窗体Graphics graphics = CreateGraphics(); //创建绘图对象graphics.DrawString("系统时间:" + //在窗体中绘出系统时间DateTime.Now.ToString("yyyy年MM月dd日 HH时mm分ss秒"),new Font("Times New Roman", 14),Brushes.Blue,new Point(10, 10));});Thread.Sleep(1000);//线程挂起1秒钟}}){IsBackground = true //将线程设置为后台线程};thread.Start(); //线程开始执行}}
}
2.生成效果

二、相关知识点
1.Thread类
创建和控制线程,设置其优先级并获取其状态。
(1)Thread.Sleep()方法
将当前线程挂起指定的时间。
- 重载
Sleep(Int32) | 将当前线程挂起指定的毫秒数。 |
Sleep(TimeSpan) | 将当前线程挂起指定的时间。 |
- Sleep(Int32)
将当前线程挂起指定的毫秒数。
public static void Sleep (int millisecondsTimeout);参数
millisecondsTimeout Int32
挂起线程的毫秒数。 如果 millisecondsTimeout 参数的值为零,则该线程会将其时间片的剩余部分让给任何已经准备好运行的、具有同等优先级的线程。 如果没有其他已经准备好运行的、具有同等优先级的线程,则不会挂起当前线程的执行。例外
ArgumentOutOfRangeException
超时值为负且不等于 Infinite。
// Sleep(Int32)
// 使用 Sleep 方法来阻止应用程序的main线程。
namespace ConsoleApp12
{class Example{static void Main(){for (int i = 0; i < 5; i++){Console.WriteLine("Sleep for 2 seconds.");Thread.Sleep(2000);}Console.WriteLine("Main thread exits.");}}
}/* 运行结果:
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.*/
- Sleep(TimeSpan) 将当前线程挂起指定的时间。
public static void Sleep (TimeSpan timeout);参数
timeout TimeSpan
挂起线程的时间量。 如果 timeout 参数的值为 Zero,则该线程会将其时间片的剩余部分让给任何已经准备好运行的、具有同等优先级的线程。 如果没有其他已经准备好运行的、具有同等优先级的线程,则不会挂起当前线程的执行。例外
ArgumentOutOfRangeException
的 timeout 值为负,不等于 Infinite 以毫秒为单位,或大于 Int32.MaxValue 毫秒。
// Sleep(TimeSpan)
// 使用 Sleep(TimeSpan) 方法重载来阻止应用程序的main线程五次,每次两秒。
namespace ConsoleApp13
{class Example{static void Main(){TimeSpan interval = new(0, 0, 2);for (int i = 0; i < 5; i++){Console.WriteLine("Sleep for 2 seconds.");Thread.Sleep(interval);}Console.WriteLine("Main thread exits.");}}
}
/* 运行结果:
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.*/
(2)Thread(ThreadStart)
初始化 Thread 类的新实例。
public Thread (System.Threading.ThreadStart start);参数
start ThreadStart
表示开始执行此线程时要调用的方法的 ThreadStart 委托。例外
ArgumentNullException
start 参数为 null。
// Thread(ThreadStart)
// 创建并执行静态方法的线程
namespace ConsoleApp10
{class Test{ static void Main(){Work.DoWork();Thread newthread = new(Work.DoWork); //创建线程=把要处理的方法放进这个线程Thread newThread = new(new ThreadStart(Work.DoWork)); //等效语句newthread.Start();newThread.Start();}}class Work{ public static void DoWork(){Console.WriteLine("Thread newThread=new()和 newThread.Start()总是成对出现的,");Console.WriteLine("前者负责创建一个新线程,后者负责执行这个线程");}}
}
// 运行结果:
/*
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程*/
// 创建执行实例方法的线程
namespace ConsoleApp11
{class Test{static void Main(){Work threadWork = new(); //创建实例方法Thread newthread = new(Work.DoWork); Thread newThread = new(new ThreadStart(Work.DoWork));newthread.Start();newThread.Start();}}class Work{public static void DoWork(){Console.WriteLine("Thread newThread=new()和 newThread.Start()总是成对出现的,");Console.WriteLine("前者负责创建一个新线程,后者负责执行这个线程");}}
}
//运行结果:
/*
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程
Thread newThread=new()和 newThread.Start()总是成对出现的,
前者负责创建一个新线程,后者负责执行这个线程*/
(3)Thread.IsBackground 属性
获取或设置一个值,该值指示某个线程是否为后台线程。
public bool IsBackground { get; set; }属性值
Boolean
如果此线程为或将成为后台线程,则为 true;否则为 false。例外
ThreadStateException
线程终止。
// Thread.IsBackground 属性
// 创建前台线程和后台线程,对前台线程和后台线程的行为进行对比。
// 前台线程使进程保持运行,直到完成其 for 循环并终止。
// 由于前台线程已完成执行,因此后台线程将终止进程。
namespace ConsoleApp15
{class Example{static void Main(){BackgroundTest shortTest = new(5);Thread foregroundThread =new(new ThreadStart(shortTest.RunLoop));BackgroundTest longTest = new(50);Thread backgroundThread =new(new ThreadStart(longTest.RunLoop)){IsBackground = true};foregroundThread.Start();backgroundThread.Start();}}class BackgroundTest(int maxIterations){readonly int maxIterations = maxIterations;public void RunLoop(){for (int i = 0; i < maxIterations; i++){Console.WriteLine("{0} count: {1}",Thread.CurrentThread.IsBackground ?"Background Thread" : "Foreground Thread", i);Thread.Sleep(250);}Console.WriteLine("{0} finished counting.",Thread.CurrentThread.IsBackground ?"Background Thread" : "Foreground Thread");}}
}
// 运行结果:
/*
Foreground Thread count: 0
Background Thread count: 0
Background Thread count: 1
Foreground Thread count: 1
Background Thread count: 2
Foreground Thread count: 2
Background Thread count: 3
Foreground Thread count: 3
Background Thread count: 4
Foreground Thread count: 4
Background Thread count: 5
Foreground Thread finished counting.*/
(4)Invoke( )
详见本文作者发表的其他文章,C#用Parallel.Invoke 方法尽可能并行执行提供的每个操作-CSDN博客 https://wenchm.blog.csdn.net/article/details/135697802
2.CreateGraphics()
3.DateTime.Now
4.(MethodInvoker)delegate ()
5.TimeSpan(Int32, Int32, Int32)
将 TimeSpan 结构的新实例初始化为指定的小时数、分钟数和秒数。
(1)定义
public TimeSpan (int hours, int minutes, int seconds);参数
hours Int32
小时数。minutes Int32
分钟数。seconds Int32
秒数。例外
ArgumentOutOfRangeException
参数指定小于 TimeSpanTimeSpan.MinValue 或大于 TimeSpan.MaxValue 的值。注解
将指定的 hours、 minutes和 seconds 转换为时钟周期,该值初始化此实例。
(2)示例
// Example of the TimeSpan( int, int, int ) constructor.
// 创建多个 TimeSpan 对象,该重载将 初始化 TimeSpan 为指定的小时数、分钟数和秒数。
namespace ConsoleApp14
{class TimeSpanCtorIIIDemo{static void CreateTimeSpan(int hours, int minutes,int seconds){TimeSpan elapsedTime = new(hours, minutes, seconds);string ctor = string.Format("TimeSpan( {0}, {1}, {2} )",hours, minutes, seconds); Console.WriteLine("{0,-37}{1,16}",ctor, elapsedTime.ToString());//输出格式}static void Main(){Console.WriteLine("This example of the TimeSpan( int, int, int ) " +"\nconstructor generates the following output.\n");Console.WriteLine("{0,-37}{1,16}", "Constructor", "Value"); //{0,-37}代表左对齐长度不足时空格抵Console.WriteLine("{0,-37}{1,16}", "-----------", "-----"); //{1,16}代表右对齐,长度不足时空格抵CreateTimeSpan(10, 20, 30);CreateTimeSpan(-10, 20, 30);CreateTimeSpan(0, 0, 37230);CreateTimeSpan(1000, 2000, 3000);CreateTimeSpan(1000, -2000, -3000);CreateTimeSpan(999999, 999999, 999999);}}
}
/*
This example of the TimeSpan( int, int, int )
constructor generates the following output.Constructor Value
----------- -----
TimeSpan( 10, 20, 30 ) 10:20:30
TimeSpan( -10, 20, 30 ) -09:39:30
TimeSpan( 0, 0, 37230 ) 10:20:30
TimeSpan( 1000, 2000, 3000 ) 43.02:10:00
TimeSpan( 1000, -2000, -3000 ) 40.05:50:00
TimeSpan( 999999, 999999, 999999 ) 42372.15:25:39
*/
相关文章:

C#使用DateTime.Now静态属性动态获得系统当前日期和时间
目录 一、实例 1.源码 2.生成效果 二、相关知识点 1.Thread类 (1)Thread.Sleep()方法 (2)Thread(ThreadStart) (3)IsBackground (4)Invoke( ) 2.CreateGrap…...

华为机考入门python3--(0)模拟题2-vowel元音字母翻译
分类:字符串 知识点: 字符串转list,每个字符成为list中的一个元素 list(string) 字符串变大小写 str.upper(), str.lower() 题目来自【华为招聘模拟考试】 # If you need to import additional packages or classes, please import …...

【轮式平衡机器人】——角度/速度/方向控制分析软件控制框架
轮式平衡机器人具有自不稳定性,可类比一级倒立摆系统的控制方法,常见有反馈线性化方法、非线性PID控制、自适应控制、自抗扰控制,还有改进的传统缺乏对外界干扰和参数改变鲁棒性的滑模变结构控制。我们采用较为简单的双闭环PID控制实现平衡模…...

HYBBS 表白墙网站PHP程序源码 可封装成APP
源码介绍 PHP表白墙网站源码,可以做校园内的,也可以做校区间的,可封装成APP。告别QQ空间的表白墙吧。 安装PHP5.6以上随意 上传程序安装,然后设置账号密码,登陆后台切换模板手机PC都要换开启插件访问前台。 安装完…...

【设计模式】适配器和桥接器模式有什么区别?
今天我探讨一下适配器模式和桥接模式,这两种模式往往容易被混淆,我们希望通过比较他们的区别和联系,能够让大家有更清晰的认识。 适配器模式:连接不兼容接口 当你有一个类的接口不兼容你的系统,而你又不希望修改这个…...
C语言应用层程序热补丁
一、热补丁简介 一个正在运行的程序,要是有某函数或某流程有问题,需要修改,有两个方式: 1.通过设置LD_PRELOAD把需要的库重新定向,但这种方式需要重启正在运行的程序。 2.通过修改可执行文件某个函数指向的地址&…...

【代码随想录+力扣hot100】双指针
文章目录 27. 移除元素思路:代码: 26. 删除有序数组中的重复项代码:思路一:重复元素必相邻思路二:从第一个位置开始考虑快慢指针 977.有序数组的平方思路:代码: 283. 移动零代码:思路…...

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略
关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 读写分离 分布式数据库的…...

qnx 上screen + egl + opengles 最简实例
文章目录 前言一、qnx 上的窗口系统——screen二、screen + egl + opengles 最简实例1.使用 addvariant 命令创建工程目录2. 添加源码文件3. common.mk 文件4. 编译与执行总结参考资料前言 本文主要介绍如何在QNX 系统上使用egl和opengles 控制GPU渲染一个三角形并显示到屏幕上…...
python基础学习-02
基本的程序设计模式 任何的程序设计都包含IPO,它们分别代表如下: I:Input 输入,程序的输入 P:Process 处理,程序的主要逻辑过程 O:Output 输出,程序的输出 因此如果想要通过计算…...
服务调用Ribbon,LoadBalance,Feign
服务调用Ribbon、Fegin Ribbon实现负载均衡的原理 1:LoadBalancerAutoConfiguration这个类,这个类主要做的就是把LoadBalancer拦截器封装到RestTemplte拦截器集合里面去。 2:然后在代码里面调用restTemplate.getForObject或者其他方法的时候&…...

一条sql是如何运行的
在我们平时使用sql的时候,基本是基于黑盒的使用方式,在客户端输入一条sql语句,然后回显想要的数据,对于mysql server端内部如何运行的以及与存储引擎如何交互的不得而知。 通过下面一幅图,大致描述客户端和服务端交互…...

SystemC学习笔记(三) - 查看模块的波形
简述 波形在Simulation/Emulation中地位十分重要,尤其是在研发初期,只能通过波形来查看软件hang住的位置。 对于TLM来说,查看波形一般是指查看pvbus上的transaction,而对于SystemC本身来说,查看波形就是使用Gtkwave或…...
计算机网络(第六版)复习提纲5
SS2.2 有关信道的几个基本概念 2.通信模型 三个主要部分:信源、信道、信宿 3.通信方式: a)术语:消息(传递的内容)、数据(传递的形式)、信号(数据表现形式,有模拟信号和数字信号两种&…...

JavaScript 学习笔记(WEB APIs Day3)
「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. JavaScript 学习笔记(Day1) 2. JavaSc…...
Springboot自动装配:三个注解、Selector、spring.factories文件、@ConditionalOnProperty注解
借鉴: 这个链接是包含run方法进来debug看整个过程的,建议先看:https://www.cnblogs.com/starsray/p/15580915.html https://blog.csdn.net/fengxiandada/article/details/130080828 Springboot自动装配 1.创建springboot应用 如何创建一个s…...

软件工程应用题汇总
绘制数据流图(L0/L1/L2) DFD/L0(基本系统模型) 只包含源点终点和一个处理(XXX系统) DFD/L1(功能级数据流图)在L0基础上进一步划分处理(XXX系统) 个人理解 DFD/L2(在L1基础上进一步分解后的数据流图) 数据…...

P1789 【Mc生存】插火把(C语言)
首先,我们可以先用数组来储存地图(建议用int,我试过bool会RE) 每次读入火把和萤石的坐标 接着把能照亮的地方标记起来 最后用计数器统计会生成怪的地方有钻石的话还怕怪吗 最后,上代码 #include<stdio.h> i…...
计算机网络(第六版)复习提纲6
SS2.3 导引型传输媒体 1.三类位非导引型传输媒体 a)双绞线:两根铜线平行会相互干扰,垂直干扰最小,双绞线近似垂直,绞合度越高,可用的数据传输率越高。 i.无屏蔽双绞线UTP(便宜) ii.屏蔽双绞线&a…...

安卓平板局域网内远程控制工控机方法
安卓平板局域网内远程控制工控机方法 将所需要远程控制的工控机通过网线连接到具有WiFi功能的路由器上,将安卓平板连接上WiFi,如下图所示 下载NoMachine远程软件安装包,官网地址:https://www.nomachine.com/ 点击Download now按钮…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...