日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)

發布時間:2023/12/10 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 時間的類型

?1. 背景

?  這里為什么要介紹時間類型呢,明明是定時調度篇,原因是在定時任務中,任務什么時間開始執行,什么時間結束執行,要用到各種各樣的時間模式,雖然這不能算是一個復雜的問題,但在正式介紹Quartz.Net之前,還是很有必要補充一下的,該章節就是解決這類問題的。

?2. ?時間類型

  時間類型主要有兩類:DateTime和DateTimeOffset

? ? ??(詳情參考:https://docs.microsoft.com/zh-cn/dotnet/standard/datetime/choosing-between-datetime)

?(1). DateTime:表示的時區有限,國內采用這個時間。

?(2). DateTimeOffset:可以表示任何時區,通過偏移量來控制。(Quartz中提供DateBuilder類來實現DateTimeOffset類型)

3. 類型轉換

?(1).?DateTime→DateTimeOffset 利用DateTimeOffset的構造函數

?(2).?DateTimeOffset→DateTime 利用Convert.ToDateTime方法

?下面分享一段兩種類型相互轉換的代碼:

1 // DateTime類型 2 DateTime date1 = DateTime.Parse("2018-01-01 11:45:30"); 3 //DateTimeOffset類型 4 DateTimeOffset date3 = DateBuilder.DateOf(11, 45, 30, 1, 1, 2018); 5 //1. DateTime 轉換成 DateTimeOffset 6 DateTimeOffset date16 = new DateTimeOffset(date1, TimeSpan.Zero); 7 //2. DateTimeOffset 轉換成 DateTime 8 DateTime date17 = Convert.ToDateTime(date3);

二. 各種模式的表示

(一). 定點模式

1. 需求:

  a. 2018-01-01 11:45:30

  b. 01-01 1:45:30

  c. 1:45:30

2. 解決方案

(1). DateTime類

  a. 利用DateTime.Parse()進行轉換,如:DateTime.Parse("2018-01-01 11:45:30");

  b. 利用DateTime類豐富的構造函數來執行, 如:new DateTime(2018, 1, 1, 11, 45, 30);

(2). DateTimeOffset類

  a. 利用DateBuilder.DateOf()進行轉換,如:DateBuilder.DateOf(11, 45, 30, 1, 1, 2018);

  b. 利用DateTimeOffset類豐富的構造函數來執行, 如: new DateTimeOffset(2018, 1, 1, 11, 45, 30, TimeSpan.Zero);

  c. 另外,DateBuilder類還提供 TodayAt和TomorrowAt類,便于在當前年月日的基礎上進行處理

代碼分享:

?

1 DateTime date1 = DateTime.Parse("2018-01-01 11:45:30"); 2 DateTime date2 = new DateTime(2018, 1, 1, 11, 45, 30); 3 DateTimeOffset date3 = DateBuilder.DateOf(11, 45, 30, 1, 1, 2018); 4 DateTimeOffset date4 = new DateTimeOffset(2018, 1, 1, 11, 45, 30, TimeSpan.Zero); 5 //默認為當前年月日 6 DateTimeOffset date5 = DateBuilder.TodayAt(1, 45, 30); 7 //默認為當前年月日的基礎上 + 1天 8 DateTimeOffset date6 = DateBuilder.TomorrowAt(1, 45, 30);

(二). 四舍五入的模式

1. 需求:1:45:30 → 2:00:00

        → 1:00:00

2. 解決方案:

  (1).DateBuilder.EvenHourDate 在小時的基礎上進行“入”

  (2).DateBuilder.EvenHourDateBefore 在小時的基礎上進行“舍”

  (3).另外在分鐘的基礎上進行入和舍有: EvenMinuteDate和EvenMinuteDateBefore

   ? ? 在秒鐘的基礎上進行入和舍有: EvenSecondDate和EvenSecondDateBefore

?代碼分享:

1 DateTimeOffset date5 = DateBuilder.TodayAt(1, 45, 30); 2 DateTimeOffset date7 = DateBuilder.EvenHourDate(date5); //當前年月日下:2:00:00 3 DateTimeOffset date8 = DateBuilder.EvenHourDateBefore(date5); //當前年月日下:1:00:00

(三). 倍數模式(不常用)

1. 包括:NextGivenMinuteDate和NextGivenSecondDate

  以NextGivenMinuteDate為例,說明它的用法,NextGivenSecondDate與他類似

  查看源碼:public static DateTimeOffset NextGivenMinuteDate(DateTimeOffset? date, int minuteBase);

第一個參數:可以為空,也可以指定時間

第二個參數:把一個小時按minuteBase分鐘進行劃分,也就是60/minuteBase等份,真正的運行時間所在區間的下一個minuteBase分鐘運行,

(PS:比如minuteBase=20,那么就是將分鐘劃分為3等分,分別是:20、40、60, 比如現在分鐘是在 0-19分59秒,任何一個都會變為 20分00秒)

2. 用法:第一個參數為空的話,取的是當前時間為依據。

    第一個參數有值的話,是以第一個參數為依據。

代碼分享:

//以當前時間為依據,假設當前時間為:14:43:29 d9=14:50:00 d10=15:00:00 DateTimeOffset d9 = DateBuilder.NextGivenMinuteDate(null, 10); DateTimeOffset d10 = DateBuilder.NextGivenMinuteDate(null, 20); //以第一個參數為依據 DateTimeOffset date9 = DateBuilder.NextGivenMinuteDate(DateBuilder.TodayAt(1, 45, 30), 10); //50分 秒數為0 DateTimeOffset date10 = DateBuilder.NextGivenMinuteDate(new DateTime(2018, 1, 1, 11, 25, 30), 20); //40分 秒數為0

(四). 遞增模式

1. 需求:解決在某個時間點上增加:秒、分、分鐘、小時、或天、月等。

2. 解決方案:

  利用DateTime類中的各種Add函數來解決。

  常用方法有:AddSeconds、AddMinutes、AddHours、AddDays、AddMonths

?代碼分享:

1 DateTime date1 = DateTime.Parse("2018-01-01 11:45:30"); 2 DateTime date11 = date1.AddSeconds(1); //2018-01-01 11:45:31 3 DateTime date12 = date1.AddMinutes(1); //2018-01-01 11:46:30 4 DateTime date13 = date1.AddHours(1); //2018-01-01 12:45:30 5 DateTime date14 = date1.AddDays(1); //2018-01-02 11:45:30 6 DateTime date15 = date1.AddMonths(1); //2018-02-01 11:45:30

?

總結

以上是生活随笔為你收集整理的第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。