首頁 > 軟體

.NET 6新特性試用之DateOnly和TimeOnly型別

2022-03-14 13:01:04

前言:

在.NET 6之前,沒有方法來直接表示沒有時間的日期(比如生日)或者沒有日期的一天中的時間(比如鬧鐘)。

雖然我們可以使用DateTime類和TimeSpan類來代替,但是實際使用中會存在一些問題:

var dateOnly = new DateTime(2021, 10, 1);
//輸出
2021/10/1 0:00:00
//問題:還是有時間,並不能代表0點出生

var timeOnly = new TimeSpan(11, 22, 0).Add(TimeSpan.FromHours(24));
//輸出
1.11:22:00
//問題:過了24小時,應該還是當前時間,實際帶了天數

因此,.Net 6引入了DateOnly和TimeOnly結構,可以儲存日期和時間

舉例

​1.建立範例​

我們可以直接建立DateOnly或者TimeOnly的範例:

var dateOnly = new DateOnly(2021, 10, 1);
//輸出
10/1/2021

var timeOnly = new TimeOnly(11, 22, 0);
//輸出
11:22 AM

還可以使用​​FromDateTime​​方法從DateTime範例中生成:

var datetime = new DateTime(2021, 10, 1, 10, 1, 0);

var dateOnly = DateOnly.FromDateTime(datetime);

var timeOnly = TimeOnly.FromDateTime(datetime);

還可以使用​​FromTimeSpan​​方法從TimeSpan範例中生成TimeOnly:

var timeSpan = new TimeSpan(11, 22, 0);
 
var timeOnly = TimeOnly.FromTimeSpan(timeSpan);

​2.型別轉換​

反之,可以使用​​ToDateTime​​方法將DateOnly範例轉換成DateTime:

var dateOnly = new DateOnly(2021, 10, 1);

var timeOnly = new TimeOnly(11, 22, 0);

var datetime = dateOnly.ToDateTime(timeOnly);
//輸出
10/1/2021 11:22:00 AM

可以看到,必須同時帶上TimeOnly範例才能轉換。

也可以使用​​ToTimeSpan​​方法將TimeOnly範例轉換成TimeSpan:

var timeOnly = new TimeOnly(11, 22, 0);

var timeSpan = timeOnly.ToTimeSpan();
//輸出
11:22:00

​3.操作​

DateOnly和TimeOnly型別還提供了比較運運算元(例如​​<​​​和​​>​​​)和​​AddXXX​​方法進行操作:

var noon = new TimeOnly(12, 0);
if (now < noon)
{
    //早上
    ...
}

dateOnly = dateOnly.AddDays(7);

timeOnly = timeOnly.AddHours(24);

需要注意的是:僅僅TimeOnly型別支援​​-​​運運算元,獲得TimeSpan時間間隔。

結論:

​DateOnly和TimeOnly的引入並不意味著DateTime將不再有用,只是將它們用在不同場景。 

到此這篇關於.NET 6新特性試用之DateOnly和TimeOnly型別的文章就介紹到這了,更多相關DateOnly和TimeOnly型別內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com