網(wǎng)站建設(shè) 工具廈門(mén)seo排名優(yōu)化公司
🎉🎉 時(shí)間是一個(gè)非常抽象的概念,本篇文章我們不深究目前電腦上的時(shí)候是如何保持全網(wǎng)同步。主要是講講在使用C#編程語(yǔ)言里的時(shí)間類(lèi)型。最后使用定時(shí)任務(wù)簡(jiǎn)單寫(xiě)一個(gè)提醒功能,比如:每天10點(diǎn)準(zhǔn)時(shí)打開(kāi)一次csdn首頁(yè),在工作忙碌之際瀏覽下技術(shù)信息或博客🎉🎉
目錄
- 1、C#時(shí)間類(lèi)型
- 1.1、結(jié)構(gòu)體
- 1.2、默認(rèn)值
- 1.3、設(shè)置默認(rèn)空值
- 2、定時(shí)器功能
- 2.1、場(chǎng)景描述
- 2.2、定時(shí)類(lèi)
- 2.3、當(dāng)前時(shí)間
- 2.4、定時(shí)彈頁(yè)
- 2.5、完整代碼
- 2.5、實(shí)現(xiàn)效果
1、C#時(shí)間類(lèi)型
在C#開(kāi)發(fā)語(yǔ)言里的時(shí)間和日期,主要是使用Datetime類(lèi)、,用于表達(dá)時(shí)間和時(shí)間處理,TA能夠獲取和設(shè)置時(shí)間、時(shí)區(qū)、以及格式化。
1.1、結(jié)構(gòu)體
很多小伙伴都會(huì)以為時(shí)間類(lèi)型是一個(gè)class類(lèi),從下圖可以知道,它是一個(gè)struct結(jié)構(gòu)
1).net framework
繼承了多個(gè)接口類(lèi),實(shí)現(xiàn)的功能也非常豐富,已經(jīng)可以滿足大部分需求功能
2).net core
到了跨平臺(tái)框架后,它是在System.Runtime里
1.2、默認(rèn)值
直接定義不賦值,默認(rèn)也是有值得,它是以公歷0001年1月1日00:00:00.000
1)獲取當(dāng)前時(shí)間
從下圖可以知道,Now獲取的當(dāng)前時(shí)間就是電腦的時(shí)間
DateTime dt = DateTime.Now;
1.3、設(shè)置默認(rèn)空值
由于在實(shí)際項(xiàng)目中可能時(shí)間會(huì)有空值情況,這個(gè)時(shí)候就不能直接返回值,不然就會(huì)顯示默認(rèn)0001時(shí)間值。在C#里直接在時(shí)間類(lèi)型后面加個(gè)問(wèn)號(hào)接口
DateTime? dtNull;
💗💗 作者:小5聊
🏆🏆 原則:Write Less Do More!
📋📋 簡(jiǎn)介:一只喜歡全棧方向的程序員,專(zhuān)注基礎(chǔ)和實(shí)戰(zhàn)分享,歡迎咨詢(xún),盡綿薄之力答疑解惑!
2、定時(shí)器功能
在C#里寫(xiě)一個(gè)定時(shí)任務(wù)非常簡(jiǎn)單,這里使用Task類(lèi)來(lái)實(shí)現(xiàn),這里有一個(gè)異步的概念,不深入探究,結(jié)合while以及Sleep()休眠方法
2.1、場(chǎng)景描述
每天定時(shí)10點(diǎn)整,自動(dòng)打開(kāi)一個(gè)chrome谷歌瀏覽器,并跳轉(zhuǎn)到csdn首頁(yè)。
2.2、定時(shí)類(lèi)
在Task之前,多線程處理方式有Thread、ThreadPool、委托,他們?cè)谫Y源占用、阻塞等方面處理的不好,為了改善才有了Task,啟動(dòng)方法很簡(jiǎn)單,如下
Task.Run(() =>
{// 寫(xiě)業(yè)務(wù)代碼,和主業(yè)務(wù)不沖突,異步執(zhí)行
});
2.3、當(dāng)前時(shí)間
界面可以設(shè)置一個(gè)label標(biāo)簽,實(shí)時(shí)顯示當(dāng)前的時(shí)間,方法邏輯很簡(jiǎn)單,直接就是一個(gè)Task異步,然后在異步方法里使用while無(wú)限循環(huán),每次休眠1秒后再執(zhí)行,就會(huì)有實(shí)時(shí)時(shí)間動(dòng)態(tài)效果。
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、定時(shí)彈頁(yè)
同上,異步方法的邏輯判斷為小時(shí)分秒,滿足條件則通過(guò)進(jìn)程類(lèi)打開(kāi)瀏覽器,并跳轉(zhuǎn)到指定地址顯示
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、完整代碼
判斷邏輯,取小時(shí)為10,取分鐘為0,1分鐘執(zhí)行一次判斷,確保只彈出一次
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);}});}}
}