DateOnly ve TimeOnly yapılarını kullanma

DateOnly ve TimeOnly yapıları .NET 6 ile kullanıma sunulmuştur ve sırasıyla belirli bir tarihi veya günün saatini temsil eder. .NET 6'nın öncesinde ve her zaman .NET Framework'te, geliştiriciler aşağıdakilerden birini temsil etmek için türünü (veya başka bir alternatifi) kullandı DateTime :

  • Tam bir tarih ve saat.
  • Saati göz ardı eden bir tarih.
  • Tarihi göz ardı eden bir zaman.

DateOnly ve TimeOnly bir türün belirli bölümlerini DateTime temsil eden türlerdir.

Önemli

DateOnly ve TimeOnly türleri .NET Framework'te kullanılamaz.

DateOnly yapısı

Yapı DateOnly , saat olmadan belirli bir tarihi temsil eder. Saat bileşeni olmadığından, günün başından sonuna kadar olan bir tarihi temsil eder. Bu yapı doğum tarihi, yıl dönümü tarihi veya işle ilgili tarihler gibi belirli tarihleri depolamak için idealdir.

Zaman bileşenini yoksayarak kullanabilirsiniz DateTime ancak üzerinden DateTimekullanmanın DateOnly birkaç avantajı vardır:

  • Bir DateTime saat dilimine göre uzaklığı varsa, yapı önceki veya sonraki güne yuvarlanabilir. DateOnly saat dilimine göre kaydırılamaz ve her zaman ayarlanan tarihi temsil eder.

  • Bir DateTime yapıyı seri hale getirme, verilerin amacını gizleyebilecek zaman bileşenini içerir. Ayrıca, DateOnly daha az veriyi seri hale getirir.

  • Kod SQL Server gibi bir veritabanıyla etkileşime geçtiğinde, tüm tarihler genellikle saat içermeyen veri türü olarak date depolanır. DateOnly veritabanı türüyle daha iyi eşleşir.

DateOnly gibi DateTime0001-01-01 ile 9999-12-31 arasında bir aralığa sahiptir. Oluşturucuda DateOnly belirli bir takvim belirtebilirsiniz. Ancak nesne, DateOnly oluşturmak için hangi takvimin kullanıldığına bakılmaksızın her zaman proleptik Gregoryen takvimdeki bir tarihi temsil eder. Örneğin, tarihi İbranice takvimden oluşturabilirsiniz, ancak tarih Gregoryen'e dönüştürülür:

var hebrewCalendar = new System.Globalization.HebrewCalendar();
var theDate = new DateOnly(5776, 2, 8, hebrewCalendar); // 8 Cheshvan 5776

Console.WriteLine(theDate);

/* This example produces the following output:
 *
 * 10/21/2015
*/
Dim hebrewCalendar = New System.Globalization.HebrewCalendar()
Dim theDate = New DateOnly(5776, 2, 8, hebrewCalendar) ' 8 Cheshvan 5776

Console.WriteLine(theDate)

' This example produces the following output
'
' 10/21/2015

DateOnly örnekleri

hakkında DateOnlybilgi edinmek için aşağıdaki örnekleri kullanın:

DateTime'ı DateOnly'ye Dönüştürme

Aşağıdaki kodda DateOnly.FromDateTime gösterildiği gibi bir türden DateTime tür oluşturmak DateOnly için statik yöntemini kullanın:

var today = DateOnly.FromDateTime(DateTime.Now);
Console.WriteLine($"Today is {today}");

/* This example produces output similar to the following:
 * 
 * Today is 12/28/2022
*/
Dim today = DateOnly.FromDateTime(DateTime.Now)
Console.WriteLine($"Today is {today}")

' This example produces output similar to the following
' 
' Today is 12/28/2022

Gün, ay, yıl ekleme veya çıkarma

Bir DateOnly yapıyı ayarlamak için kullanılan üç yöntem vardır: AddDays, AddMonthsve AddYears. Her yöntem bir tamsayı parametresi alır ve bu ölçüme göre tarihi artırır. Negatif bir sayı sağlanırsa, tarih bu ölçümle azaltılır. Yöntemler, yapısı sabit olduğundan yeni bir örneğini DateOnlydöndürür.

var theDate = new DateOnly(2015, 10, 21);

var nextDay = theDate.AddDays(1);
var previousDay = theDate.AddDays(-1);
var decadeLater = theDate.AddYears(10);
var lastMonth = theDate.AddMonths(-1);

Console.WriteLine($"Date: {theDate}");
Console.WriteLine($" Next day: {nextDay}");
Console.WriteLine($" Previous day: {previousDay}");
Console.WriteLine($" Decade later: {decadeLater}");
Console.WriteLine($" Last month: {lastMonth}");

/* This example produces the following output:
 * 
 * Date: 10/21/2015
 *  Next day: 10/22/2015
 *  Previous day: 10/20/2015
 *  Decade later: 10/21/2025
 *  Last month: 9/21/2015
*/
Dim theDate = New DateOnly(2015, 10, 21)

Dim nextDay = theDate.AddDays(1)
Dim previousDay = theDate.AddDays(-1)
Dim decadeLater = theDate.AddYears(10)
Dim lastMonth = theDate.AddMonths(-1)

Console.WriteLine($"Date: {theDate}")
Console.WriteLine($" Next day: {nextDay}")
Console.WriteLine($" Previous day: {previousDay}")
Console.WriteLine($" Decade later: {decadeLater}")
Console.WriteLine($" Last month: {lastMonth}")

' This example produces the following output
' 
' Date: 10/21/2015
'  Next day: 10/22/2015
'  Previous day: 10/20/2015
'  Decade later: 10/21/2025
'  Last month: 9/21/2015

DateOnly ayrıştırma ve biçimlendirme

DateOnly aynı yapı gibi DateTime bir dizeden ayrıştırılabilir. Tüm standart .NET tarih tabanlı ayrıştırma belirteçleri ile DateOnlyçalışır. Bir türü dizeye DateOnly dönüştürürken, standart .NET tarih tabanlı biçimlendirme desenlerini de kullanabilirsiniz. Dizeleri biçimlendirme hakkında daha fazla bilgi için bkz . Standart tarih ve saat biçim dizeleri.

var theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture);  // Custom format
var theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture);

Console.WriteLine(theDate.ToString("m", CultureInfo.InvariantCulture));     // Month day pattern
Console.WriteLine(theDate2.ToString("o", CultureInfo.InvariantCulture));    // ISO 8601 format
Console.WriteLine(theDate2.ToLongDateString());

/* This example produces the following output:
 * 
 * October 21
 * 2015-10-21
 * Wednesday, October 21, 2015
*/
Dim theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture) ' Custom format
Dim theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture)

Console.WriteLine(theDate.ToString("m", CultureInfo.InvariantCulture))     ' Month day pattern
Console.WriteLine(theDate2.ToString("o", CultureInfo.InvariantCulture))    ' ISO 8601 format
Console.WriteLine(theDate2.ToLongDateString())

' This example produces the following output
' 
' October 21
' 2015-10-21
' Wednesday, October 21, 2015

DateOnly Karşılaştırması

DateOnly diğer örneklerle karşılaştırılabilir. Örneğin, bir tarihin başka bir tarihten önce mi yoksa sonra mı olduğunu veya bugünün belirli bir tarihle eşleşip eşleşmediğini de kontrol edebilirsiniz.

var theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture);  // Custom format
var theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture);
var dateLater = theDate.AddMonths(6);
var dateBefore = theDate.AddDays(-10);

Console.WriteLine($"Consider {theDate}...");
Console.WriteLine($" Is '{nameof(theDate2)}' equal? {theDate == theDate2}");
Console.WriteLine($" Is {dateLater} after? {dateLater > theDate} ");
Console.WriteLine($" Is {dateLater} before? {dateLater < theDate} ");
Console.WriteLine($" Is {dateBefore} after? {dateBefore > theDate} ");
Console.WriteLine($" Is {dateBefore} before? {dateBefore < theDate} ");

/* This example produces the following output:
 * 
 * Consider 10/21/2015
 *  Is 'theDate2' equal? True
 *  Is 4/21/2016 after? True
 *  Is 4/21/2016 before? False
 *  Is 10/11/2015 after? False
 *  Is 10/11/2015 before? True
*/
Dim theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture) ' Custom format
Dim theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture)
Dim dateLater = theDate.AddMonths(6)
Dim dateBefore = theDate.AddDays(-10)

Console.WriteLine($"Consider {theDate}...")
Console.WriteLine($" Is '{NameOf(theDate2)}' equal? {theDate = theDate2}")
Console.WriteLine($" Is {dateLater} after? {dateLater > theDate} ")
Console.WriteLine($" Is {dateLater} before? {dateLater < theDate} ")
Console.WriteLine($" Is {dateBefore} after? {dateBefore > theDate} ")
Console.WriteLine($" Is {dateBefore} before? {dateBefore < theDate} ")

' This example produces the following output
' 
' Consider 10/21/2015
'  Is 'theDate2' equal? True
'  Is 4/21/2016 after? True
'  Is 4/21/2016 before? False
'  Is 10/11/2015 after? False
'  Is 10/11/2015 before? True

TimeOnly yapısı

Yapı, TimeOnly günlük çalar saat veya her gün öğle yemeği yediğiniz saat gibi bir günün saatini temsil eder. TimeOnly, günün belirli bir saati olan 00:00:00.00000000 - 23:59:59.99999999 aralığıyla sınırlıdır.

TimeOnly Tür kullanılmadan önce, programcılar genellikle belirli bir saati temsil etmek için türü veya TimeSpan türü kullanırDateTime. Ancak, tarihsiz bir saatin simülasyonunu yapmak için bu yapıların kullanılması bazı sorunları ortaya çıkararak TimeOnly şunları çözebilir:

  • TimeSpan kronometre ile ölçülen süre gibi geçen süreyi temsil eder. Üst aralık 29.000 yıldan fazladır ve değeri, zamanda geriye doğru hareket ettiğini göstermek için negatif olabilir. Negatif TimeSpan , günün belirli bir saatini göstermez.

  • Günün saati olarak kullanılırsa TimeSpan , 24 saatlik günün dışındaki bir değere yönlendirilebileceği riski vardır. TimeOnly bu riske sahip değildir. Örneğin, bir çalışanın çalışma vardiyası 18:00'de başlıyorsa ve 8 saat sürüyorsa, yapıya TimeOnly 8 saat eklendiğinde saat 2:00'ye yuvarlanır

  • Günün bir saati için kullanmak DateTime için rastgele bir tarihin saatle ilişkilendirilmesi ve daha sonra göz ardı edilmesi gerekir. Tarih olarak (0001-01-01) seçmek DateTime.MinValue yaygın bir uygulamadır, ancak saat değeri çıkarılırsa DateTime bir OutOfRange özel durum oluşabilir. TimeOnly 24 saatlik zaman çerçevesi boyunca zaman ileri ve geri doğru ilerlerken bu sorun olmaz.

  • Bir DateTime yapıyı seri hale getirme, verilerin amacını gizleyebilecek tarih bileşenini içerir. Ayrıca, TimeOnly daha az veriyi seri hale getirir.

TimeOnly örnekleri

hakkında TimeOnlybilgi edinmek için aşağıdaki örnekleri kullanın:

DateTime'ı TimeOnly'ye Dönüştürme

Aşağıdaki kodda TimeOnly.FromDateTime gösterildiği gibi bir türden DateTime tür oluşturmak TimeOnly için statik yöntemini kullanın:

var now = TimeOnly.FromDateTime(DateTime.Now);
Console.WriteLine($"It is {now} right now");

/* This example produces output similar to the following:
 * 
 * It is 2:01 PM right now
*/
Dim now = TimeOnly.FromDateTime(DateTime.Now)
Console.WriteLine($"It is {now} right now")

' This example produces output similar to the following
' 
' It is 2:01 PM right now

Zaman ekleme veya çıkarma

Bir TimeOnly yapıyı ayarlamak için kullanılan üç yöntem vardır: AddHours, AddMinutesve Add. AddMinutes Hem hem de AddHours bir tamsayı parametresi alın ve değeri buna göre ayarlayın. Çıkarmak için negatif bir değer ve eklenecek pozitif bir değer kullanabilirsiniz. Yöntemler, yapısı sabit olduğundan yeni bir örneği TimeOnly döndürülür. Add yöntemi bir TimeSpan parametre alır ve değeri değerden TimeOnly ekler veya çıkarır.

TimeOnly Yalnızca 24 saatlik bir dönemi temsil ettiğinden, bu üç yönteme sağlanan değerleri eklerken uygun şekilde ileri veya geri alınır. Örneğin, 01:30'un değerini 01:30:00 kullanarak 1:30'ı gösterirseniz, bu sürenin sonundan -4 saat eklerseniz, değeri 21:30 olan değerine geri 21:30:00döner. , AddMinutesve Add için AddHoursyuvarlanan gün sayısını yakalayan yöntem aşırı yüklemeleri vardır.

var theTime = new TimeOnly(7, 23, 11);

var hourLater = theTime.AddHours(1);
var minutesBefore = theTime.AddMinutes(-12);
var secondsAfter = theTime.Add(TimeSpan.FromSeconds(10));
var daysLater = theTime.Add(new TimeSpan(hours: 21, minutes: 200, seconds: 83), out int wrappedDays);
var daysBehind = theTime.AddHours(-222, out int wrappedDaysFromHours);

Console.WriteLine($"Time: {theTime}");
Console.WriteLine($" Hours later: {hourLater}");
Console.WriteLine($" Minutes before: {minutesBefore}");
Console.WriteLine($" Seconds after: {secondsAfter}");
Console.WriteLine($" {daysLater} is the time, which is {wrappedDays} days later");
Console.WriteLine($" {daysBehind} is the time, which is {wrappedDaysFromHours} days prior");

/* This example produces the following output:
 * 
 * Time: 7:23 AM
 *  Hours later: 8:23 AM
 *  Minutes before: 7:11 AM
 *  Seconds after: 7:23 AM
 *  7:44 AM is the time, which is 1 days later 
 *  1:23 AM is the time, which is -9 days prior
*/
Dim wrappedDays As Integer
Dim wrappedDaysFromHours As Integer

Dim theTime = New TimeOnly(7, 23, 11)

Dim hourLater = theTime.AddHours(1)
Dim minutesBefore = theTime.AddMinutes(-12)
Dim secondsAfter = theTime.Add(TimeSpan.FromSeconds(10))
Dim daysLater = theTime.Add(New TimeSpan(hours:=21, minutes:=200, seconds:=83), wrappedDays)
Dim daysBehind = theTime.AddHours(-222, wrappedDaysFromHours)

Console.WriteLine($"Time: {theTime}")
Console.WriteLine($" Hours later: {hourLater}")
Console.WriteLine($" Minutes before: {minutesBefore}")
Console.WriteLine($" Seconds after: {secondsAfter}")
Console.WriteLine($" {daysLater} is the time, which is {wrappedDays} days later")
Console.WriteLine($" {daysBehind} is the time, which is {wrappedDaysFromHours} days prior")

' This example produces the following output
' 
' Time: 7:23 AM
'  Hours later: 8:23 AM
'  Minutes before: 7:11 AM
'  Seconds after: 7:23 AM
'  7:44 AM is the time, which is 1 days later 
'  1:23 AM is the time, which is -9 days prior

TimeOnly ayrıştırma ve biçimlendirme

TimeOnly aynı yapı gibi DateTime bir dizeden ayrıştırılabilir. Tüm standart .NET zamana dayalı ayrıştırma belirteçleri ile TimeOnlyçalışır. Bir türü dizeye TimeOnly dönüştürürken, standart .NET tarih tabanlı biçimlendirme desenlerini de kullanabilirsiniz. Dizeleri biçimlendirme hakkında daha fazla bilgi için bkz . Standart tarih ve saat biçim dizeleri.

var theTime = TimeOnly.ParseExact("5:00 pm", "h:mm tt", CultureInfo.InvariantCulture);  // Custom format
var theTime2 = TimeOnly.Parse("17:30:25", CultureInfo.InvariantCulture);

Console.WriteLine(theTime.ToString("o", CultureInfo.InvariantCulture));     // Round-trip pattern.
Console.WriteLine(theTime2.ToString("t", CultureInfo.InvariantCulture));    // Long time format
Console.WriteLine(theTime2.ToLongTimeString());

/* This example produces the following output:
 * 
 * 17:00:00.0000000
 * 17:30
 * 5:30:25 PM
*/
Dim theTime = TimeOnly.ParseExact("5:00 pm", "h:mm tt", CultureInfo.InvariantCulture) ' Custom format
Dim theTime2 = TimeOnly.Parse("17:30:25", CultureInfo.InvariantCulture)

Console.WriteLine(theTime.ToString("o", CultureInfo.InvariantCulture))     ' Round-trip pattern.
Console.WriteLine(theTime2.ToString("t", CultureInfo.InvariantCulture))    ' Long time format
Console.WriteLine(theTime2.ToLongTimeString())

' This example produces the following output
' 
' 17:00:00.0000000
' 17:30
' 5:30:25 PM

DateOnly ve TimeOnly türlerini seri hale getirme

.NET 7+ ile serileştirmeyi System.Text.Json ve seri durumdan kaldırmayı DateOnly ve TimeOnly türleri destekler. Aşağıdaki nesneyi göz önünde bulundurun:

sealed file record Appointment(
    Guid Id,
    string Description,
    DateOnly Date,
    TimeOnly StartTime,
    TimeOnly EndTime);
Public NotInheritable Class Appointment
    Public Property Id As Guid
    Public Property Description As String
    Public Property DateValue As DateOnly?
    Public Property StartTime As TimeOnly?
    Public Property EndTime As TimeOnly?
End Class

Aşağıdaki örnek bir Appointment nesneyi serileştirir, sonuçta elde edilen JSON'yi görüntüler ve ardından türün yeni bir örneğine geri seri durumdan Appointment çıkartır. Son olarak, özgün ve yeni seri durumdan çıkarılmış örnekler eşitlik için karşılaştırılır ve sonuçlar konsola yazılır:

Appointment originalAppointment = new(
    Id: Guid.NewGuid(),
    Description: "Take dog to veterinarian.",
    Date: new DateOnly(2002, 1, 13),
    StartTime: new TimeOnly(5,15),
    EndTime: new TimeOnly(5, 45));
string serialized = JsonSerializer.Serialize(originalAppointment);

Console.WriteLine($"Resulting JSON: {serialized}");

Appointment deserializedAppointment =
    JsonSerializer.Deserialize<Appointment>(serialized)!;

bool valuesAreTheSame = originalAppointment == deserializedAppointment;
Console.WriteLine($"""
    Original record has the same values as the deserialized record: {valuesAreTheSame}
    """);
        Dim originalAppointment As New Appointment With {
            .Id = Guid.NewGuid(),
            .Description = "Take dog to veterinarian.",
            .DateValue = New DateOnly(2002, 1, 13),
            .StartTime = New TimeOnly(5, 3, 1),
            .EndTime = New TimeOnly(5, 3, 1)
}
        Dim serialized As String = JsonSerializer.Serialize(originalAppointment)

        Console.WriteLine($"Resulting JSON: {serialized}")

        Dim deserializedAppointment As Appointment =
            JsonSerializer.Deserialize(Of Appointment)(serialized)

        Dim valuesAreTheSame As Boolean =
            (originalAppointment.DateValue = deserializedAppointment.DateValue AndAlso
            originalAppointment.StartTime = deserializedAppointment.StartTime AndAlso
            originalAppointment.EndTime = deserializedAppointment.EndTime AndAlso
            originalAppointment.Id = deserializedAppointment.Id AndAlso
            originalAppointment.Description = deserializedAppointment.Description)

        Console.WriteLine(
            $"Original object has the same values as the deserialized object: {valuesAreTheSame}")

Önceki kodda:

  • Bir Appointment nesne örneği oluşturulur ve değişkene appointment atanır.
  • appointment Örneği kullanılarak JsonSerializer.SerializeJSON'a seri hale getirilir.
  • Sonuçta elde edilen JSON konsola yazılır.
  • JSON, kullanılarak JsonSerializer.Deserializetürünün yeni bir örneğine seri durumdan Appointment çıkarılır.
  • Özgün ve yeni seri durumdan çıkarılmış örnekler eşitlik için karşılaştırılır.
  • Karşılaştırmanın sonucu konsola yazılır.

Daha fazla bilgi için bkz . .NET'te JSON'ı seri hale getirme ve seri durumdan çıkarma.

TimeSpan ve DateTime ile çalışma

TimeOnly uygulamasından oluşturulabilir ve öğesine TimeSpandönüştürülebilir. Ayrıca, TimeOnly örneği oluşturmak TimeOnly veya bir tarih sağlandığı sürece bir DateTime örnek oluşturmak için ile DateTimebirlikte kullanılabilir.

Aşağıdaki örnek, öğesinden TimeSpanbir TimeOnly nesne oluşturur ve sonra nesneyi geri dönüştürür:

// TimeSpan must in the range of 00:00:00.0000000 to 23:59:59.9999999
var theTime = TimeOnly.FromTimeSpan(new TimeSpan(23, 59, 59));
var theTimeSpan = theTime.ToTimeSpan();

Console.WriteLine($"Variable '{nameof(theTime)}' is {theTime}");
Console.WriteLine($"Variable '{nameof(theTimeSpan)}' is {theTimeSpan}");

/* This example produces the following output:
 * 
 * Variable 'theTime' is 11:59 PM
 * Variable 'theTimeSpan' is 23:59:59
*/
' TimeSpan must in the range of 00:00:00.0000000 to 23:59:59.9999999
Dim theTime = TimeOnly.FromTimeSpan(New TimeSpan(23, 59, 59))
Dim theTimeSpan = theTime.ToTimeSpan()

Console.WriteLine($"Variable '{NameOf(theTime)}' is {theTime}")
Console.WriteLine($"Variable '{NameOf(theTimeSpan)}' is {theTimeSpan}")

' This example produces the following output
' 
' Variable 'theTime' is 11:59 PM
' Variable 'theTimeSpan' is 23:59:59

Aşağıdaki örnek, rastgele bir DateTimeTimeOnly tarih seçilmiş bir nesneden bir oluşturur:

var theTime = new TimeOnly(11, 25, 46);   // 11:25 AM and 46 seconds
var theDate = new DateOnly(2015, 10, 21); // October 21, 2015
var theDateTime = theDate.ToDateTime(theTime);
var reverseTime = TimeOnly.FromDateTime(theDateTime);

Console.WriteLine($"Date only is {theDate}");
Console.WriteLine($"Time only is {theTime}");
Console.WriteLine();
Console.WriteLine($"Combined to a DateTime type, the value is {theDateTime}");
Console.WriteLine($"Converted back from DateTime, the time is {reverseTime}");

/* This example produces the following output:
 * 
 * Date only is 10/21/2015
 * Time only is 11:25 AM
 * 
 * Combined to a DateTime type, the value is 10/21/2015 11:25:46 AM
 * Converted back from DateTime, the time is 11:25 AM
*/
Dim theTime = New TimeOnly(11, 25, 46) ' 11:   25 PM And 46 seconds
Dim theDate = New DateOnly(2015, 10, 21) ' October 21, 2015
Dim theDateTime = theDate.ToDateTime(theTime)
Dim reverseTime = TimeOnly.FromDateTime(theDateTime)

Console.WriteLine($"Date only is {theDate}")
Console.WriteLine($"Time only is {theTime}")
Console.WriteLine()
Console.WriteLine($"Combined to a DateTime type, the value is {theDateTime}")
Console.WriteLine($"Converted back from DateTime, the time is {reverseTime}")

' This example produces the following output
' 
' Date only is 10/21/2015
' Time only is 11:25 AM
' 
' Combined to a DateTime type, the value is 10/21/2015 11:25:46 AM
' Converted back from DateTime, the time is 11:25 AM

Aritmetik işleçler ve TimeOnly karşılaştırması

İki TimeOnly örnek birbiriyle karşılaştırılabilir ve bir saatin diğer iki zaman arasında olup olmadığını denetlemek için yöntemini kullanabilirsiniz IsBetween . üzerinde bir toplama veya çıkarma işleci kullanıldığındaTimeOnlyTimeSpan, bir sürenin süresini temsil eden bir döndürülür.

var start = new TimeOnly(10, 12, 01); // 10:12:01 AM
var end = new TimeOnly(14, 00, 53); // 02:00:53 PM

var outside = start.AddMinutes(-3);
var inside = start.AddMinutes(120);

Console.WriteLine($"Time starts at {start} and ends at {end}");
Console.WriteLine($" Is {outside} between the start and end? {outside.IsBetween(start, end)}");
Console.WriteLine($" Is {inside} between the start and end? {inside.IsBetween(start, end)}");
Console.WriteLine($" Is {start} less than {end}? {start < end}");
Console.WriteLine($" Is {start} greater than {end}? {start > end}");
Console.WriteLine($" Does {start} equal {end}? {start == end}");
Console.WriteLine($" The time between {start} and {end} is {end - start}");

/* This example produces the following output:
 * 
 * Time starts at 10:12 AM and ends at 2:00 PM
 *  Is 10:09 AM between the start and end? False
 *  Is 12:12 PM between the start and end? True
 *  Is 10:12 AM less than 2:00 PM? True
 *  Is 10:12 AM greater than 2:00 PM? False
 *  Does 10:12 AM equal 2:00 PM? False
 *  The time between 10:12 AM and 2:00 PM is 03:48:52
*/
Dim startDate = New TimeOnly(10, 12, 1) ' 10:12:01 AM
Dim endDate = New TimeOnly(14, 0, 53) ' 02:00:53 PM

Dim outside = startDate.AddMinutes(-3)
Dim inside = startDate.AddMinutes(120)

Console.WriteLine($"Time starts at {startDate} and ends at {endDate}")
Console.WriteLine($" Is {outside} between the start and end? {outside.IsBetween(startDate, endDate)}")
Console.WriteLine($" Is {inside} between the start and end? {inside.IsBetween(startDate, endDate)}")
Console.WriteLine($" Is {startDate} less than {endDate}? {startDate < endDate}")
Console.WriteLine($" Is {startDate} greater than {endDate}? {startDate > endDate}")
Console.WriteLine($" Does {startDate} equal {endDate}? {startDate = endDate}")
Console.WriteLine($" The time between {startDate} and {endDate} is {endDate - startDate}")

' This example produces the following output
' 
' Time starts at 10:12 AM And ends at 2:00 PM
'  Is 10:09 AM between the start And end? False
'  Is 12:12 PM between the start And end? True
'  Is 10:12 AM less than 2:00 PM? True
'  Is 10:12 AM greater than 2:00 PM? False
'  Does 10:12 AM equal 2:00 PM? False
'  The time between 10:12 AM and 2:00 PM is 03:48:52