System.TimeSpan yapısı
Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.
TimeSpan Nesne, bir saniyenin pozitif veya negatif gün, saat, dakika, saniye ve kesir sayısı olarak ölçülen bir zaman aralığını (süre veya geçen süre) temsil eder. Yapı TimeSpan , günün saatini temsil etmek için de kullanılabilir, ancak yalnızca saat belirli bir tarihle ilişkili değilse. Aksi takdirde, DateTime veya DateTimeOffset yapısı kullanılmalıdır. (Günün saatini yansıtmak için yapısını kullanma TimeSpan hakkında daha fazla bilgi için bkz . DateTime, DateTimeOffset, TimeSpan ve TimeZoneInfo Arasında Seçim Yapma.)
Not
Değer TimeSpan bir zaman aralığını temsil eder ve belirli sayıda gün, saat, dakika, saniye ve milisaniye olarak ifade edilebilir. Belirli bir başlangıç veya bitiş noktasına başvurmadan genel bir aralığı temsil ettiğinden, her ikisi de değişken sayıda güne sahip olan yıl ve ay cinsinden ifade edilemez. Belirli bir DateTime saat dilimine başvurmadan tarih ve saati temsil eden bir değerden veya belirli bir saat anını temsil eden bir DateTimeOffset değerden farklıdır.
Yapının süreyi ölçmek için kullandığı en büyük zaman TimeSpan birimi bir gündür. Aylar ve yıllar gibi daha büyük zaman birimlerindeki gün sayısı değiştiğinden, zaman aralıkları tutarlılık için gün cinsinden ölçülür.
Bir TimeSpan nesnenin değeri, temsil edilen zaman aralığına eşit olan onay işareti sayısıdır. Bir kene 100 nanosaniyeye veya saniyenin on milyonda birine eşittir. Bir TimeSpan nesnenin değeri ile TimeSpan.MinValueTimeSpan.MaxValuearasında değişebilir.
TimeSpan değerinin örneğini oluşturma
Bir değerin örneğini TimeSpan çeşitli yollarla oluşturabilirsiniz:
Örtük parametresiz oluşturucusunu çağırarak. Bu, aşağıdaki örnekte gösterildiği gibi değeri TimeSpan.Zeroolan bir nesne oluşturur.
TimeSpan interval = new TimeSpan(); Console.WriteLine(interval.Equals(TimeSpan.Zero)); // Displays "True".
let interval = TimeSpan() printfn $"{interval.Equals TimeSpan.Zero}" // Displays "True".
Dim interval As New TimeSpan() Console.WriteLine(interval.Equals(TimeSpan.Zero)) ' Displays "True".
Açık oluşturucularından birini çağırarak. Aşağıdaki örnek belirtilen saat, dakika ve saniye sayısına kadar bir TimeSpan değer başlatır.
TimeSpan interval = new TimeSpan(2, 14, 18); Console.WriteLine(interval.ToString()); // Displays "02:14:18".
let interval = TimeSpan(2, 14, 18) printfn $"{interval}" // Displays "02:14:18".
Dim interval As New TimeSpan(2, 14, 18) Console.WriteLine(interval.ToString()) ' Displays "02:14:18".
Bir yöntemi çağırarak veya değer döndüren bir TimeSpan işlem gerçekleştirerek. Örneğin, aşağıdaki örnekte gösterildiği gibi iki tarih ve saat değeri arasındaki aralığı temsil eden bir TimeSpan değerin örneğini oluşturabilirsiniz.
DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0); DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0); TimeSpan travelTime = arrival - departure; Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime); // The example displays the following output: // 6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00
let departure = DateTime(2010, 6, 12, 18, 32, 0) let arrival = DateTime(2010, 6, 13, 22, 47, 0) let travelTime = arrival - departure printfn $"{arrival} - {departure} = {travelTime}" // The example displays the following output: // 6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00
Dim departure As DateTime = #06/12/2010 6:32PM# Dim arrival As DateTime = #06/13/2010 10:47PM# Dim travelTime As TimeSpan = arrival - departure Console.WriteLine("{0} - {1} = {2}", arrival, departure, travelTime) ' The example displays the following output: ' 6/13/2010 10:47:00 PM - 6/12/2010 6:32:00 PM = 1.04:15:00
Aşağıdaki örnekte gösterildiği gibi, bir nesneyi sıfır saat değerine bu şekilde de başlatabilirsiniz TimeSpan .
Random rnd = new Random(); TimeSpan timeSpent = TimeSpan.Zero; timeSpent += GetTimeBeforeLunch(); timeSpent += GetTimeAfterLunch(); Console.WriteLine("Total time: {0}", timeSpent); TimeSpan GetTimeBeforeLunch() { return new TimeSpan(rnd.Next(3, 6), 0, 0); } TimeSpan GetTimeAfterLunch() { return new TimeSpan(rnd.Next(3, 6), 0, 0); } // The example displays output like the following: // Total time: 08:00:00
open System let rnd = Random() let getTimeBeforeLunch () = TimeSpan(rnd.Next(3, 6), 0, 0) let getTimeAfterLunch() = TimeSpan(rnd.Next(3, 6), 0, 0) do let timeSpent = TimeSpan.Zero let timeSpent = timeSpent + getTimeBeforeLunch () let timeSpent = timeSpent + getTimeAfterLunch () printfn $"Total time: {timeSpent}" // The example displays output like the following: // Total time: 08:00:00
Module Example Dim rnd As New Random() Public Sub Main() Dim timeSpent As TimeSpan = TimeSpan.Zero timeSpent += GetTimeBeforeLunch() timeSpent += GetTimeAfterLunch() Console.WriteLine("Total time: {0}", timeSpent) End Sub Private Function GetTimeBeforeLunch() As TimeSpan Return New TimeSpan(rnd.Next(3, 6), 0, 0) End Function Private Function GetTimeAfterLunch() As TimeSpan Return New TimeSpan(rnd.Next(3, 6), 0, 0) End Function End Module ' The example displays output like the following: ' Total time: 08:00:00
TimeSpandeğerleri, , DateTimeOffsetve yapılarının DateTimearitmetik işleçleri ve TimeSpan yöntemleri tarafından döndürülür.
Bir TimeSpan değerin dize gösterimini ayrıştırarak. zaman aralıkları içeren dizeleri değerlere dönüştürmek için TimeSpan ve TryParse yöntemlerini kullanabilirsinizParse. Aşağıdaki örnek, dize dizisini Parse değerlere dönüştürmek için TimeSpan yöntemini kullanır.
string[] values = { "12", "31.", "5.8:32:16", "12:12:15.95", ".12"}; foreach (string value in values) { try { TimeSpan ts = TimeSpan.Parse(value); Console.WriteLine("'{0}' --> {1}", value, ts); } catch (FormatException) { Console.WriteLine("Unable to parse '{0}'", value); } catch (OverflowException) { Console.WriteLine("'{0}' is outside the range of a TimeSpan.", value); } } // The example displays the following output: // '12' --> 12.00:00:00 // Unable to parse '31.' // '5.8:32:16' --> 5.08:32:16 // '12:12:15.95' --> 12:12:15.9500000 // Unable to parse '.12'
let values = [| "12"; "31."; "5.8:32:16"; "12:12:15.95"; ".12" |] for value in values do try let ts = TimeSpan.Parse value printfn $"'{value}' --> {ts}" with | :? FormatException -> printfn $"Unable to parse '{value}'" | :? OverflowException -> printfn $"'{value}' is outside the range of a TimeSpan." // The example displays the following output: // '12' --> 12.00:00:00 // Unable to parse '31.' // '5.8:32:16' --> 5.08:32:16 // '12:12:15.95' --> 12:12:15.9500000 // Unable to parse '.12'
Dim values() As String = {"12", "31.", "5.8:32:16", "12:12:15.95", ".12"} For Each value As String In values Try Dim ts As TimeSpan = TimeSpan.Parse(value) Console.WriteLine("'{0}' --> {1}", value, ts) Catch e As FormatException Console.WriteLine("Unable to parse '{0}'", value) Catch e As OverflowException Console.WriteLine("'{0}' is outside the range of a TimeSpan.", value) End Try Next ' The example displays the following output: ' '12' --> 12.00:00:00 ' Unable to parse '31.' ' '5.8:32:16' --> 5.08:32:16 ' '12:12:15.95' --> 12:12:15.9500000 ' Unable to parse '.12'
Ayrıca, veya TryParseExact yöntemini çağırarak ayrıştırılacak ve bir TimeSpan değere dönüştürülecek giriş dizesinin ParseExact tam biçimini tanımlayabilirsiniz.
TimeSpan değerlerinde işlem gerçekleştirme
ve işleçlerini kullanarak Addition veya ve SubtractionSubtract yöntemlerini çağırarak Add zaman sürelerini ekleyebilir ve çıkarabilirsiniz. ayrıca , CompareTove Equals yöntemlerini çağırarak Compareiki süreyi karşılaştırabilirsiniz. Yapı TimeSpan ayrıca zaman aralıklarını pozitif ve negatif değerlere dönüştüren ve Negate yöntemlerini de içerirDuration,
Değer aralığı TimeSpan olarak MaxValueayarlanırMinValue.
TimeSpan değerini biçimlendirme
Bir TimeSpan değer [-]d olarak gösterilebilir.ss:mm:ss.ff, burada isteğe bağlı eksi işareti negatif bir zaman aralığını gösterir, d bileşeni gün, ss 24 saatlik bir saatte ölçülen saat, mm dakika, ss saniye ve ff saniye kesirleridir. Başka bir ifadeyle, bir zaman aralığı, gün saati olmayan pozitif veya negatif gün sayısından, günün saati olan gün sayısından veya yalnızca günün saatinden oluşur.
.NET Framework 4'le başlayarak yapı, yönteminin TimeSpan aşırı yüklemeleri ToString aracılığıyla kültüre duyarlı biçimlendirmeyi destekler ve bu da bir TimeSpan değeri dize gösterimine dönüştürür. Varsayılan TimeSpan.ToString() yöntem, .NET Framework'ün önceki sürümlerindeki dönüş değeriyle aynı sabit bir biçim kullanarak bir zaman aralığı döndürür. Aşırı yükleme, TimeSpan.ToString(String) zaman aralığının dize gösterimini tanımlayan bir biçim dizesi belirtmenize olanak tanır. Aşırı yükleme, TimeSpan.ToString(String, IFormatProvider) bir biçim dizesi ve biçimlendirme kuralları zaman aralığının dize gösterimini oluşturmak için kullanılan kültürü belirtmenize olanak tanır. TimeSpan hem standart hem de özel biçim dizelerini destekler. (Daha fazla bilgi için bkz. Standart TimeSpan Biçim Dizeleri ve Özel TimeSpan Biçim Dizeleri.) Ancak, yalnızca standart biçim dizeleri kültüre duyarlıdır.
Eski TimeSpan biçimlendirmesini geri yükleme
Bazı durumlarda, .NET Framework 3.5 ve önceki sürümlerdeki değerleri başarıyla biçimlendiren TimeSpan kod .NET Framework 4'te başarısız olur. Bu, bir değeri biçim <dizesiyle biçimlendirmek TimeSpan için bir TimeSpan_LegacyFormatMode> öğesi yöntemini çağıran kodda en yaygın olanıdır. Aşağıdaki örnek,.NET Framework 3.5 ve önceki sürümlerde bir TimeSpan değeri başarıyla biçimlendirmektedir, ancak .NET Framework 4 ve sonraki sürümlerde bir özel durum oluşturur. .NET Framework 3.5 ve önceki sürümlerde yoksayılan desteklenmeyen bir biçim tanımlayıcısı kullanarak bir TimeSpan değeri biçimlendirmeye çalıştığına dikkat edin.
ShowFormattingCode();
// Output from .NET Framework 3.5 and earlier versions:
// 12:30:45
// Output from .NET Framework 4:
// Invalid Format
Console.WriteLine("---");
ShowParsingCode();
// Output:
// 000000006 --> 6.00:00:00
void ShowFormattingCode()
{
TimeSpan interval = new TimeSpan(12, 30, 45);
string output;
try
{
output = String.Format("{0:r}", interval);
}
catch (FormatException)
{
output = "Invalid Format";
}
Console.WriteLine(output);
}
void ShowParsingCode()
{
string value = "000000006";
try
{
TimeSpan interval = TimeSpan.Parse(value);
Console.WriteLine("{0} --> {1}", value, interval);
}
catch (FormatException)
{
Console.WriteLine("{0}: Bad Format", value);
}
catch (OverflowException)
{
Console.WriteLine("{0}: Overflow", value);
}
}
let showFormattingCode () =
let interval = TimeSpan(12, 30, 45)
try
$"{interval:r}"
with :? FormatException ->
"Invalid Format"
|> printfn "%s"
let showParsingCode () =
let value = "000000006"
try
let interval = TimeSpan.Parse value
printfn $"{value} --> {interval}"
with
| :? FormatException ->
printfn $"{value}: Bad Format"
| :? OverflowException ->
printfn $"{value}: Overflow"
showFormattingCode ()
// Output from .NET Framework 3.5 and earlier versions:
// 12:30:45
// Output from .NET Framework 4:
// Invalid Format
printfn "---"
showParsingCode ()
// Output:
// 000000006 --> 6.00:00:00
Dim interval As New TimeSpan(12, 30, 45)
Dim output As String
Try
output = String.Format("{0:r}", interval)
Catch e As FormatException
output = "Invalid Format"
End Try
Console.WriteLine(output)
' Output from .NET Framework 3.5 and earlier versions:
' 12:30:45
' Output from .NET Framework 4:
' Invalid Format
Kodu değiştiremiyorsanız, değerlerin eski biçimlendirmesini TimeSpan aşağıdaki yollardan biriyle geri yükleyebilirsiniz:
TimeSpan_LegacyFormatMode> öğesini içeren <bir yapılandırma dosyası oluşturarak. Bu öğenin
enabled
özniteliğini uygulama başına eski TimeSpan biçimlendirmeyi geri yüklemek içintrue
ayarlamak.Uygulama etki alanı oluştururken "NetFx40_TimeSpanLegacyFormatMode" uyumluluk anahtarını ayarlayarak. Bu, uygulama başına etki alanı temelinde eski TimeSpan biçimlendirmeyi etkinleştirir. Aşağıdaki örnek, eski TimeSpan biçimlendirme kullanan bir uygulama etki alanı oluşturur.
using System; public class Example2 { public static void Main() { AppDomainSetup appSetup = new AppDomainSetup(); appSetup.SetCompatibilitySwitches(new string[] { "NetFx40_TimeSpanLegacyFormatMode" }); AppDomain legacyDomain = AppDomain.CreateDomain("legacyDomain", null, appSetup); legacyDomain.ExecuteAssembly("ShowTimeSpan.exe"); } }
open System let appSetup = AppDomainSetup() appSetup.SetCompatibilitySwitches [| "NetFx40_TimeSpanLegacyFormatMode" |] let legacyDomain = AppDomain.CreateDomain("legacyDomain", null, appSetup) legacyDomain.ExecuteAssembly "ShowTimeSpan.exe" |> ignore
Module Example3 Public Sub Main() Dim appSetup As New AppDomainSetup() appSetup.SetCompatibilitySwitches({"NetFx40_TimeSpanLegacyFormatMode"}) Dim legacyDomain As AppDomain = AppDomain.CreateDomain("legacyDomain", Nothing, appSetup) legacyDomain.ExecuteAssembly("ShowTimeSpan.exe") End Sub End Module
Aşağıdaki kod yeni uygulama etki alanında yürütürse eski TimeSpan biçimlendirme davranışına geri döner.
using System; public class Example3 { public static void Main() { TimeSpan interval = DateTime.Now - DateTime.Now.Date; string msg = String.Format("Elapsed Time Today: {0:d} hours.", interval); Console.WriteLine(msg); } } // The example displays the following output: // Elapsed Time Today: 01:40:52.2524662 hours.
open System let interval = DateTime.Now - DateTime.Now.Date printfn $"Elapsed Time Today: {interval:d} hours." // The example displays the following output: // Elapsed Time Today: 01:40:52.2524662 hours.
Module Example4 Public Sub Main() Dim interval As TimeSpan = Date.Now - Date.Now.Date Dim msg As String = String.Format("Elapsed Time Today: {0:d} hours.", interval) Console.WriteLine(msg) End Sub End Module ' The example displays output like the following: ' Elapsed Time Today: 01:40:52.2524662 hours.