.NET 6 Yenilikleri – DateOnly ve TimeOnly

Eğer .NET Framework ile aşinaysanız, DateTime ve DateTimeOffset gibi yapıları daha önce kullanmışsınızdır.

.NET 6 ile hayatımıza 2 yeni struct girdi: DateOnly ve TimeOnly.

DateOnly isimden de anlaşılacağı gibi “”sadece tarih” değerini barındırıyor. Bu yapı doğum günleri, işe alım tarihi, iş günleri gibi, belirli bir zaman ile ilişkisi olmayan birimler için gayet uygun bir yapı. Bu yapı tabi o tarih gününün “tamamını” kapsıyor şeklinde düşünebilirsiniz. Özellikle TimeZoneInfo gibi bir yapı içerisinde belki de o timezone için var olmayan bir saat değerine sahip bir DateTime’ı çevirirken oluşabilecek olası bug’ların da bu yapı sayesinde önüne geçiliyor.

DateTime gibi Kind özelliği yok DateOnly içerisinde, her zaman Unspecified olarak düşünebilrisiniz.

Sql Server vb. veritabanları ile iletişimde olduğunda da DateOnly yapısı gayet kullanışlı çünkü bir çok veritabanında var olan “date” yapısıyla gayet uyumlu. DateTime’ı bu tip ile eşleştirdiğinizde zaman özelliğini kaybediyordunuz, bu senaryoda en azından artık bir “zaman” olmadığını düşünebiliyoruz.

DateTime gibi 0001-01-01 ile 9999-12-31 aralığında. Ve yine DateTime gibi internal olarak gregoryan takviminde her zaman constructor içerisinde başka Calendar verseniz bile.

TimeOnly de isimden anlaşılacağı gibi, sadece günün saatini tutan bir struct. Bu yapı görüşme saati, günlük alarm saati gibi sadece saatin önemli olduğu kavramlar için gayet uygun.

TimeSpan gibi bir zaman aralığı değil de, gece yarısından itibaren geçen zaman’ı tutuyor bu. Aralığı 00:00:00.0000000 ile 23:59:59.9999999. DateTime gibi Ticks bazlı bir yapısı var (gece yarısından itibaren). TimeSpan gibi negatif olamıyor. TimeSpan’i günün saati olarak parse ederken sorunlar çıkabiliyordu, TimeOnly’de böyle bir risk yok.

Son olarak, TimeOnly’nin InBetween metodu çok güzel. Hem normal saat aralıkları için (10:00 ile 12:00 arasında mı), hem de gece yarısını geçen case’lerde (23:00 ile 02:00 arasında mı) çalışıyor.

Kaynaklar:

DateOnly MSDN: https://docs.microsoft.com/en-us/dotnet/api/system.dateonly?view=net-6.0

TimeOnly MSDN: https://docs.microsoft.com/en-us/dotnet/api/system.timeonly?view=net-6.0

Date, Time, and Time Zone Enhancements in .NET 6: https://devblogs.microsoft.com/dotnet/date-time-and-time-zone-enhancements-in-net-6/

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.