.NET 6 / C#10中引入TimeOnly和DateOnly結構,來代表只是一個時間和分別僅一個日期。
好的舊DateTime結構總是有一個Now靜態屬性,它會給你當前的日期和時間。
我期望TimeOnly和DateOnly結構都具有類似的靜態屬性;喜歡TimeOnly.Nowor DateOnly.Today,但他們顯然沒有。
那么,如果我想要一個DateOnly代表當前日期的TimeOnly物件,或者一個代表當前時間的物件,我該怎么辦?
我也想知道為什么這些新結構沒有這樣的屬性?
uj5u.com熱心網友回復:
您可以使用.FromDateTime()方法,
僅獲取當前日期:
var dateNow = DateOnly.FromDateTime(DateTime.Now);
僅獲取當前時間:
var timeNow = TimeOnly.FromDateTime(DateTime.Now);
有關更多詳細資訊,您可以查看Github 問題。有幾個很好的評論解釋了為什么 .Now沒有引入DateOnly和TimeOnly
為什么.Today,.Now和UtcNow屬性不介紹DateOnly?
- 從@tarekgh 評論來看,dotnet 社區正試圖保持與時區
DateOnly無關
@tarekgh 的下一條評論解釋了如果他們將這些屬性引入DateOnly.
在閱讀了 github 執行緒和其他幾個檔案后,我覺得引入DateOnly和TimeOnly結構只是為了解耦DateTime.
日期和時間的這種分化將幫助我們在未來執行個人計算Date和Time分開。
這將幫助我們在粒度級別精確地設計我們的模型類。
uj5u.com熱心網友回復:
打電話怎么樣.FromDateTime():
var date = DateOnly.FromDateTime(DateTime.UtcNow);
var time = TimeOnly.FromDateTime(DateTime.UtcNow);
DateOnly和TimeOnly 檔案中的詳細資訊。
uj5u.com熱心網友回復:
要獲取表示當前日期的 DateOnly 物件,您可以使用:
var currentDate = DateOnly.FromDateTime(DateTime.Now);
同樣,要獲取表示當前日期的 TimeOnly 物件,您可以使用:
var currentTime = TimeOnly.FromDateTime(DateTime.Now);
此處詳細討論了不包括 .Now 屬性的原因:https : //github.com/dotnet/runtime/issues/53498
uj5u.com熱心網友回復:
解決方案:
創建代表當前時間或日期的TimeOnlyorDateOnly物件的FromDateTime方法是將靜態方法與DateTime.Now. 所以像:
TimeOnly now = TimeOnly.FromDateTime(DateTime.Now);
DateOnly today = DateOnly.FromDateTime(DateTime.Now);
如果這是您在專案中反復需要的東西,為了避免重復,您可以創建擴展方法DateTime以將DateTime實體轉換為TimeOnlyor DateOnly:
public static class DateTimeExtensions
{
public static TimeOnly ToTimeOnly(this DateTime dateTime)
{
return TimeOnly.FromDateTime(dateTime);
}
public static DateOnly ToDateOnly(this DateTime dateTime)
{
return DateOnly.FromDateTime(dateTime);
}
}
用法:
TimeOnly now = DateTime.Now.ToTimeOnly();
DateOnly today = DateTime.Now.ToDateOnly();
請注意,這不僅可用于將當前日期或時間作為TimeOnlyor獲取,還可DateOnly用于將 的任何實體轉換DateTime為TimeOnlyor DateOnly。
另一種方法是有兩個靜態類,如下所示:
public static class TimeOnlyHelpers
{
public static TimeOnly Now => TimeOnly.FromDateTime(DateTime.Now);
}
public static class DateOnlyHelpers
{
public static DateOnly Today => DateOnly.FromDateTime(DateTime.Now);
}
用法:
TimeOnly now = TimeOnlyHelpers.Now;
DateOnly today = DateOnlyHelpers.Today;
為什么DateOnlyand上沒有簡單的屬性TimeOnly?
在此 GitHub 問題中討論了為什么沒有Now或Today屬性被添加到這些結構背后的基本原理。
簡而言之,他們不想引入時區和所有內容DateOnly,TimeOnly因為這會增加額外的復雜性,所以他們決定不這樣做,并保持新結構的簡單和明確。
There is some discussion however about whether a property like that could be added to a Clock class (still a proposal, you can follow it here) so that the usage would be along the lines of TimeOnly now = SystemClock.Local.Now, or for DateOnly like DateOnly today = SystemClock.Local.Today or something like that. But that's still undecided.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347544.html
