C#使用DateTime.Now静态属性动态获得系统当前日期和时间

news2024/12/27 1:48:03

目录

一、实例

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.coloradmin.cn/o/1400717.html

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

相关文章

【c++函数重载】

文章目录 一. 命名空间二 .全缺省参数和半缺省参数三 . 函数重载 一. 命名空间 1.不指定域&#xff1a;先在局部找&#xff0c;再全局。 2. 指定域&#xff1a;到指定的命名空间去找。 3. 当把指定命名空间放开时&#xff0c;即using namespace std&#xff1b;例如放开标准c库…

分布式 session

分布式 session 种 session 的时候需要注意范围&#xff0c;也就是 cookie.domain。 比如两个域名&#xff1a;a.heo.com&#xff0c;b.heo.com。如果要共享 cookie&#xff0c;可以种一个更高层的公共域名&#xff0c;比如 heo.com。 当服务器 A &#xff08;localhost:808…

大数据平台的硬件规划、网络调优、架构设计、节点规划

1.大数据平台硬件选型 要对Hadoop大数据平台进行硬件选型,首先需要了解Hadoop的运行架构以及每个角色的功能。在一个典型的Hadoop架构中,通常有5个角色,分别是NameNode、Standby NameNode、ResourceManager、NodeManager、DataNode以及外围机。 其中 NameNode 负责协调集群…

OneNote使用总结

试一下OneNote表格复制到CSDN的编辑器 用表格整理内容挺方便的&#xff0c;不过复制过来格式还是有些变化 目录 常用快捷键 高级应用 常用快捷键 文字编辑与排版 字号增加减小 Ctrl Shift 大于小于号 整行上下移动 左右缩进 Alt Shift方向 插入或转为公式 Alt 等于…

软件需求规格说明书-word

软件需求规格说明书编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件开发全文档获取&#xff1a;软件项目开发全套文档下载_软件项目文档-CSDN博客

Python笔记10-数据可视化练习折线图

文章目录 JSON数据Python数据和Json数据的相互转化pyecharts模块构建折线图全局配置绘制疫情数据折线图 JSON数据 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 。本质上是一个带有特定格式的字符串 主要功能&#xff1a;可以在各个编程语言中流通…

R语言的ggplot2绘制分组折线图?

R绘制分组折线图.R 首先看数据情况&#xff1a;group有3组。Time有3组&#xff0c;数据意思是在3组3个时间点测量了某指标&#xff0c;现在要绘制组1、组2、组3某指标y按时间的变化趋势 数据情况&#xff1a; 看看最终的效果图如下&#xff1a; 下面是本次使用的代码 .libPat…

合并两个有序数组(三指针法)

这道题使用三指针法&#xff0c;实际上是创建三个变量模拟下标的走势&#xff1a; 一般常规想法是先合并再排序&#xff0c;三指针则是边合并边排序&#xff1b; l1是nums1的有效数据的最后一位的下标&#xff0c;即m - 1&#xff1b; l2是num2的有效数据的最后一位的下标&a…

conda修改默认环境安装位置

conda修改默认环境安装位置 文章目录 conda修改默认环境安装位置查看conda配置信息创建.condarc&#xff08;conda runtime controlling)配置文件没有.condarc怎么办 即使创建正确放置了.condarc创建环境时还是默认指定C盘目录写权限目录修改权限 查看conda配置信息 conda con…

前端实现贪吃蛇功能

大家都玩过贪吃蛇小游戏&#xff0c;控制一条蛇去吃食物&#xff0c;然后蛇在吃到食物后会变大。本篇博客将会实现贪吃蛇小游戏的功能。 1.实现效果 2.整体布局 /*** 游戏区域样式*/ const gameBoardStyle {gridTemplateColumns: repeat(${width}, 1fr),gridTemplateRows: re…

Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法&#xff0c;在语法描述中出现&#xff1a; []&#xff0c;表示可选&#xff0c;如上[LOCATI…

【51单片机】矩阵按键

0、前言 参考&#xff1a;普中 51 单片机开发攻略 1、硬件 2、软件 main.c #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; #define GPIO_KEY P1 #d…

【操作系统和计网从入门到深入】(五)软硬链接和动静态库

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记&#xff0c;所以如果是博主比较熟悉的知识点&#xff0c;博主可能就直接跳过了&#xff0c;但是所有重要的知识点&#xff0c;在这个专栏里面都会提到&#xff01;而且我也一定会保证这个专栏知识点的完整性&…

使用RSVP进行带宽预留

使用RSVP进行带宽预留 服务质量&#xff08;QoS&#xff09;工具包括 标记&#xff0c; 管制和 整形 机制&#xff0c;主要是区分服务&#xff08;DiffServ&#xff09;工具。DiffServ机制可提供带宽保证&#xff08;在各种刚性级别上&#xff09;&#xff0c;但是它们都不提供…

Three.js 学习笔记之模型(学习中1.20更新) | 组 - 模型 - 几何体 - 材质

文章目录 模型 几何体 材质层级模型组- THREE.Group递归遍历模型树结构object3D.traverse() 模型点模型Points - 用于显示点线模型Line | LineLoop | LineSegments网格模型mesh - 三角形网格模型独有的属性与方法 几何体BufferGeometry缓冲类型几何体BufferGeometry - 基类创…

【Android】app中阻塞的looper为什么可以响应touch事件

这里&#xff0c;我们考虑一个问题&#xff0c;Android中的应用是一个looper线程&#xff0c;没有任务时就阻塞着&#xff0c;其他线程通过handler调用等方式向主线程looper发送任务&#xff0c; 如果点击应用上的按钮&#xff0c;应用是怎么及时响应的呢&#xff0c; 是专门启…

JS-WebAPIs- Window对象(五)

• BOM(浏览器对象模型) BOM(Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的。所有通过var定义在全局…

提升 Go 编程:Go 1.22 中有哪些新特性?

深入了解 Go 1.22 版本及其语言增强功能 随着 Go 编程语言的不断发展&#xff0c;即将发布的版本 Go 1.22 承诺带来各种新功能、改进和变化。预计于 2024 年 2 月发布的 Go 1.22 引入了对语言、工具、运行时、编译器和核心库的增强。让我们深入了解一些在这个即将发布的版本中开…

python基础语法(下)—— python中的元组、集合、字典、类与异常的处理

文章目录 8.python中的元组8.1元组的初始化8.2元组的解包8.3元组的比较运算8.4else 9.python中的集合9.1集合的初始化9.2集合的常用操作9.3使用for循环遍历集合 10.python中的字典10.1字典的初始化10.2字典的常见操作10.3使用for循环遍历字典 11.python中的类11.1类的定义11.2类…

二进制部署高可用k8s集群V1.20.11版本

文章目录 一、操作系统初始化配置&#xff08;所有节点均执行&#xff09;1、关闭防火墙2、关闭selinux3、关闭swap4、根据规划修改主机名5、在master节点上添加host6、将桥接的IPv4流量传递到iptables的链7、时间同步 二、部署Etcd集群1、准备cfssl证书生成工具2、生成Etcd证书…