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秒钟一刷新。

二、相关知识点

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
*/

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

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

相关文章

Pytorch文本分类入门

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

计算机网络(第六版)复习提纲5

SS2.2 有关信道的几个基本概念 2.通信模型 三个主要部分&#xff1a;信源、信道、信宿 3.通信方式: a)术语&#xff1a;消息&#xff08;传递的内容&#xff09;、数据&#xff08;传递的形式&#xff09;、信号&#xff08;数据表现形式&#xff0c;有模拟信号和数字信号两种&…

前端打同一个包可以从测试晋升到生产的配置方案

前端打同一个包从测试晋升到生产环境的方案&#xff0c;是一种高效、可靠且易于维护的部署方式。在这种方案中&#xff0c;前端代码在开发完成后&#xff0c;经过测试验证无误后&#xff0c;可以直接打包部署到生产环境&#xff0c;无需进行额外的配置或修改。这样可以减少部署…

面试题:40亿个QQ号,限制1G内存,如何去重?

文章目录 概要什么是BitMap&#xff1f;有什么用&#xff1f;什么是布隆过滤器&#xff0c;实现原理是什么&#xff1f;应用场景如何使用 概要 40亿个unsigned int&#xff0c;如果直接用内存存储的话&#xff0c;需要&#xff1a; 4*4000000000 /1024/1024/1024 14.9G &…

关于datagrip的一个错误。Unexpected update count received (Actual: 3, Expected: 1).

这一行原本的值是<null><null><null>,现在我们把它修改为1,114&#xff0c;无名氏&#xff0c;但却报错。 这是对应的sql语句&#xff0c;原因在于有三行全为 <null><null><null>&#xff0c;where无法指定是哪一行&#xff0c;所以看起来…

Vue和React的区别 | | React函数式写法和类写法的区别

Vue 和 React 都是流行的前端框架&#xff0c;它们各自有着独特的特点和适用场景。在这篇文章中&#xff0c;我们将探讨它们的区别&#xff0c;并且给出一些代码实例和解释。 Vue 和 React 的区别: 模板语法与 JSX: 在 Vue 中&#xff0c;我们使用模板语法&#xff0c;它类似…

科普大语言模型中的Embedding技术

什么是大语言模型&#xff1f; 大语言模型是指使用大量的文本数据来训练的深度神经网络&#xff0c;它们可以学习语言的规律和知识&#xff0c;并且可以生成自然的文本。大语言模型的代表有GPT-3、BERT、XLNet等&#xff0c;它们在各种自然语言处理任务中都取得了很好的效果&a…

工程师职称评审的流程

职称评审是对专业技术人员的专业考核评级&#xff0c;通过公平、工作的评审工作选拔优秀且专业的人才。职称评审的流程通常包括以下几个步骤&#xff1a; 公告评审标准和要求&#xff1a;评审机构根据不同行业、专业和职业领域的要求&#xff0c;制定相应的评审标准和要求&…

Visual Studio中,每次新建文件都会自动出现提前设置好的头文件配置方法

主要是修改 newcfile.cpp 文件&#xff0c;可以用everything或者Listary等软件直接搜索文件&#xff0c;直接跳到第4步 1.图标右击——>打开文件所在位置 2.到达IDE地址后在当前目录下找VC文件夹 3.再找 VCProjectItems 文件夹——newcfile.cpp文件 4.用记事本打开&#xff…

市场复盘总结 20240119

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 11/39 28.2% 二进三&#xff1a; 进级率低 43% 最常用的二种方法&#xff1a; 方…

AWS 专题学习 P5 (Classic SA、S3)

文章目录 Classic Solutions Architecture无状态 Web 应用程序&#xff1a;WhatIsTheTime.com背景 & 目标架构演进Well-Architected 5 pillars 有状态的 Web 应用程序&#xff1a;MyClothes.com背景 & 目标架构演进总结 有状态的 Web 应用程序&#xff1a;MyWordPress.…

springMvc的Aop解析并修改参数

在前后端接口开发过程中&#xff0c;我们常常需要对某些字段进行加解密。以下是使用Aop对接口的get参数做修改的过程&#xff1a; 自定义注解 AesMethod&#xff1a;只能用于方法 Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface AesMetho…

安捷伦E8361C 网络分析仪67GHz

安捷伦E8361C 网络分析仪 E8361C 是 Agilent 的 67 GHz 网络分析仪。网络分析仪是一种功能强大的仪器&#xff0c;可以以无与伦比的精度测量射频设备的线性特性。许多行业使用网络分析仪来测试设备、测量材料和监控信号的完整性。附加功能&#xff1a; 10 MHz 至 67 GHz 94 dB…

强缓存、协商缓存(浏览器的缓存机制)是么子?

文章目录 一.为什么要用强缓存和协商缓存&#xff1f;二.什么是强缓存&#xff1f;三.什么是协商缓存&#xff1f;四.总结 一.为什么要用强缓存和协商缓存&#xff1f; 为了减少资源请求次数&#xff0c;加快资源访问速度&#xff0c;浏览器会对资源文件如图片、css文件、js文…

vue3-侦听器

侦听器 计算属性允许我们声明性地计算衍生值。 需求在状态变化时进行一些操作&#xff0c;比如更改 Dom,根据异步操作结果去修改另外的数据状态。 watch 监听异步请求结果 <script lang"ts" setup> import { ref, watch } from "vue"const ques…

unity 编辑器开发一些记录(遇到了更新)

1、封装Toggle组件 在用toggle等会状态改变的组件时&#xff0c;通过select GUILayout.Toggle(select, text, options)通常是这样做&#xff0c;但是往往有些复杂编辑器需求&#xff0c;当select变化时需要进行复杂的计算&#xff0c;所以不希望每帧去计算select应该的信息。…

虹科分享 | 汽车技术的未来:Netropy如何测试和确保汽车以太网的性能

文章速览&#xff1a; 什么是汽车以太网&#xff1f;汽车以太网的用途是什么&#xff1f;汽车以太网的测试要求是什么&#xff1f;流量生成如何帮助测试汽车以太网&#xff1f; 如今汽车不再是单纯的代步工具&#xff0c;把人从A点带到B点&#xff0c;同时还配备了车载信息娱乐…

java打包及上传到私服务

一、准备Maven私服Nexus 添加saas.maven 仓库地址&#xff1a;http://192.168.31.109:8081/repository/saas.maven 二、新建SpringBoot项目com.saas.pdf 添加类&#xff1a;PdfUtil.java package com.saas.pdf;public class PdfUtil {public static void Save(String fileP…

Qt之使用图片填充QLabel

文章目录 前言实现步骤 前言 本文记录一下使用 QLabel 实现在我们设计的 ui 界面上显示指定的图片&#xff0c;即使用 label 插入图片。 实现步骤 1、右键项目&#xff0c;选择 Add New 2、在弹出对话框中选择“Qt Resource File” 3、命名 qrc 文件并选择添加的文件路径。…

springboot3.2+jdk21 虚拟线程 使用MDC traceId追踪日志

springboot3.2发布了&#xff0c;配合jdk21使用虚拟线程&#xff0c;使用MDC traceId追踪日志方法 关于虚拟线程和MDC traceId这里就不多说了&#xff0c;如果不清楚请自行查询资料 第一步&#xff0c;创建MdcVirtualThreadTaskExecutor /*** author xxley* date 2022/7/25 …