?? 时间是一个非常抽象的概念,本篇文章我们不深究目前电脑上的时候是如何保持全网同步。主要是讲讲在使用C#编程语言里的时间类型。最后使用定时任务简单写一个提醒功能,比如:每天10点准时打开一次csdn首页,在工作忙碌之际浏览下技术信息或博客??
目录
1、C#时间类型1.1、结构体1.2、默认值1.3、设置默认空值 2、定时器功能2.1、场景描述2.2、定时类2.3、当前时间2.4、定时弹页2.5、完整代码2.5、实现效果
1、C#时间类型
在C#开发语言里的时间和日期,主要是使用Datetime类、,用于表达时间和时间处理,TA能够获取和设置时间、时区、以及格式化。
1.1、结构体
很多小伙伴都会以为时间类型是一个class类,从下图可以知道,它是一个struct结构
1).net framework
继承了多个接口类,实现的功能也非常丰富,已经可以满足大部分需求功能
2).net core
到了跨平台框架后,它是在System.Runtime里
1.2、默认值
直接定义不赋值,默认也是有值得,它是以公历0001年1月1日00:00:00.000
1)获取当前时间
从下图可以知道,Now获取的当前时间就是电脑的时间
DateTime dt = DateTime.Now;
1.3、设置默认空值
由于在实际项目中可能时间会有空值情况,这个时候就不能直接返回值,不然就会显示默认0001时间值。在C#里直接在时间类型后面加个问号接口
DateTime? dtNull;
?? 作者:小5聊
?? 原则:Write Less Do More!
?? 简介:一只喜欢全栈方向的程序员,专注基础和实战分享,欢迎咨询,尽绵薄之力答疑解惑!
2、定时器功能
在C#里写一个定时任务非常简单,这里使用Task类来实现,这里有一个异步的概念,不深入探究,结合while以及Sleep()休眠方法
2.1、场景描述
每天定时10点整,自动打开一个chrome谷歌浏览器,并跳转到csdn首页。
2.2、定时类
在Task之前,多线程处理方式有Thread、ThreadPool、委托,他们在资源占用、阻塞等方面处理的不好,为了改善才有了Task,启动方法很简单,如下
Task.Run(() =>{// 写业务代码,和主业务不冲突,异步执行});
2.3、当前时间
界面可以设置一个label标签,实时显示当前的时间,方法逻辑很简单,直接就是一个Task异步,然后在异步方法里使用while无限循环,每次休眠1秒后再执行,就会有实时时间动态效果。
private void NowTimeData(){ CheckForIllegalCrossThreadCalls = false; Task.Run(() => { while (true) { lbTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Thread.Sleep(1 * 1000); } });}
2.4、定时弹页
同上,异步方法的逻辑判断为小时分秒,满足条件则通过进程类打开浏览器,并跳转到指定地址显示
private void OpenData(){ CheckForIllegalCrossThreadCalls = false; Task.Run(() => { while (true) { if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 0 && DateTime.Now.Second == 0) { Process process = new Process(); //process.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"; process.StartInfo.FileName = @"C:\Program Files\Google\Chrome\Application\chrome.exe"; process.StartInfo.Arguments = $"https://www.csdn.net"; process.Start(); } Thread.Sleep(1 * 1000); } });}
2.5、完整代码
判断逻辑,取小时为10,取分钟为0,1分钟执行一次判断,确保只弹出一次
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace CsndWinForm{ public partial class TimeData : Form { public TimeData() { InitializeComponent(); NowTimeData(); OpenData(); } private void NowTimeData() { CheckForIllegalCrossThreadCalls = false; Task.Run(() => { while (true) { lbTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Thread.Sleep(1 * 1000); } }); } private void OpenData() { CheckForIllegalCrossThreadCalls = false; Task.Run(() => { while (true) { if (DateTime.Now.Hour == 10&& DateTime.Now.Minute == 0) { Process process = new Process(); //process.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"; process.StartInfo.FileName = @"C:\Program Files\Google\Chrome\Application\chrome.exe"; process.StartInfo.Arguments = $"https://www.csdn.net"; process.Start(); } Thread.Sleep(60 * 1000); } }); } }}