Struktur System.TimeSpan
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Objek TimeSpan mewakili interval waktu (durasi waktu atau waktu yang berlalu) yang diukur sebagai jumlah hari, jam, menit, detik, dan pecahan positif atau negatif detik. Struktur TimeSpan juga dapat digunakan untuk mewakili waktu hari, tetapi hanya jika waktu tidak terkait dengan tanggal tertentu. Jika tidak, DateTime struktur atau DateTimeOffset harus digunakan sebagai gantinya. (Untuk informasi selengkapnya tentang menggunakan TimeSpan struktur untuk mencerminkan waktu hari, lihat Memilih Antara DateTime, DateTimeOffset, TimeSpan, dan TimeZoneInfo.)
Catatan
Nilai TimeSpan mewakili interval waktu dan dapat dinyatakan sebagai jumlah hari, jam, menit, detik, dan milidetik tertentu. Karena mewakili interval umum tanpa mereferensikan ke titik awal atau akhir tertentu, itu tidak dapat diekspresikan dalam hal tahun dan bulan, yang keduanya memiliki jumlah hari variabel. Ini berbeda dari DateTime nilai, yang mewakili tanggal dan waktu tanpa referensi ke zona waktu tertentu, atau DateTimeOffset nilai, yang mewakili momen waktu tertentu.
Unit waktu terbesar yang TimeSpan digunakan struktur untuk mengukur durasi adalah hari. Interval waktu diukur dalam hari untuk konsistensi, karena jumlah hari dalam satuan waktu yang lebih besar, seperti bulan dan tahun, bervariasi.
Nilai TimeSpan objek adalah jumlah tanda centang yang sama dengan interval waktu yang diwakili. Tanda centang sama dengan 100 nanodetik, atau sepuluh juta detik. Nilai TimeSpan objek dapat berkisar dari TimeSpan.MinValue hingga TimeSpan.MaxValue.
Membuat instans nilai TimeSpan
Anda dapat membuat TimeSpan instans nilai dalam sejumlah cara:
Dengan memanggil konstruktor tanpa parameter implisitnya. Ini membuat objek yang nilainya adalah TimeSpan.Zero, seperti yang ditunjukkan contoh berikut.
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".
Dengan memanggil salah satu konstruktor eksplisitnya. Contoh berikut menginisialisasi TimeSpan nilai ke jumlah jam, menit, dan detik tertentu.
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".
Dengan memanggil metode atau melakukan operasi yang mengembalikan TimeSpan nilai. Misalnya, Anda dapat membuat instans TimeSpan nilai yang mewakili interval antara dua nilai tanggal dan waktu, seperti yang ditunjukkan contoh berikut.
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
Anda juga dapat menginisialisasi TimeSpan objek ke nilai waktu nol dengan cara ini, seperti yang ditunjukkan contoh berikut.
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
TimeSpan nilai dikembalikan oleh operator aritmatika dan metode DateTimestruktur , , DateTimeOffsetdan TimeSpan .
Dengan mengurai representasi string dari nilai TimeSpan . Anda dapat menggunakan Parse metode dan TryParse untuk mengonversi string yang berisi interval waktu ke TimeSpan nilai. Contoh berikut menggunakan Parse metode untuk mengonversi array string menjadi TimeSpan nilai.
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'
Selain itu, Anda dapat menentukan format yang tepat dari string input yang akan diurai dan dikonversi ke TimeSpan nilai dengan memanggil ParseExact metode atau TryParseExact .
Melakukan operasi pada nilai TimeSpan
Anda dapat menambahkan dan mengurangi durasi waktu baik dengan menggunakan Addition operator dan Subtraction , atau dengan memanggil Add metode dan Subtract . Anda juga dapat membandingkan dua durasi waktu dengan memanggil Comparemetode , CompareTo, dan Equals . Struktur ini TimeSpan juga mencakup Duration metode dan Negate , yang mengonversi interval waktu menjadi nilai positif dan negatif,
Rentang TimeSpan nilai adalah MinValue ke MaxValue.
Memformat nilai TimeSpan
Nilai TimeSpan dapat direpresentasikan sebagai [-]d.hh:mm:ss.ff, di mana tanda minus opsional menunjukkan interval waktu negatif, komponen d adalah hari, hh adalah jam seperti yang diukur pada jam 24 jam, mm adalah menit, ss adalah detik, dan ff adalah pecahan detik. Artinya, interval waktu terdiri dari jumlah hari positif atau negatif tanpa waktu hari, atau sejumlah hari dengan waktu hari, atau hanya waktu hari.
Dimulai dengan .NET Framework 4, TimeSpan struktur mendukung pemformatan sensitif budaya melalui kelebihan beban metodenya ToString , yang mengonversi TimeSpan nilai ke representasi stringnya. Metode default TimeSpan.ToString() mengembalikan interval waktu dengan menggunakan format invarian yang identik dengan nilai pengembaliannya di versi .NET Framework sebelumnya. Kelebihan TimeSpan.ToString(String) beban memungkinkan Anda menentukan string format yang menentukan representasi string interval waktu. Kelebihan TimeSpan.ToString(String, IFormatProvider) beban memungkinkan Anda menentukan string format dan budaya yang konvensi pemformatannya digunakan untuk membuat representasi string interval waktu. TimeSpan mendukung string format standar dan kustom. (Untuk informasi selengkapnya, lihat String Format Rentang Waktu Standar dan String Format Rentang Waktu Kustom.) Namun, hanya string format standar yang peka terhadap budaya.
Memulihkan pemformatan TimeSpan warisan
Dalam beberapa kasus, kode yang berhasil memformat TimeSpan nilai dalam .NET Framework 3.5 dan versi yang lebih lama gagal di .NET Framework 4. Ini paling umum dalam kode yang memanggil <metode elemen TimeSpan_LegacyFormatMode> untuk memformat TimeSpan nilai dengan string format. Contoh berikut berhasil memformat TimeSpan nilai dalam .NET Framework 3.5 dan versi yang lebih lama, tetapi melemparkan pengecualian di .NET Framework 4 dan versi yang lebih baru. Perhatikan bahwa ia mencoba memformat TimeSpan nilai dengan menggunakan penentu format yang tidak didukung, yang diabaikan dalam .NET Framework 3.5 dan versi yang lebih lama.
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
Jika Anda tidak dapat mengubah kode, Anda dapat memulihkan pemformatan nilai warisan TimeSpan dengan salah satu cara berikut:
Dengan membuat file konfigurasi yang berisi <elemen TimeSpan_LegacyFormatMode>. Mengatur atribut elemen
enabled
ini untuktrue
memulihkan pemformatan warisan TimeSpan berdasarkan per aplikasi.Dengan mengatur sakelar kompatibilitas "NetFx40_TimeSpanLegacyFormatMode" saat Anda membuat domain aplikasi. Ini memungkinkan pemformatan warisan TimeSpan berdasarkan per-application-domain. Contoh berikut membuat domain aplikasi yang menggunakan pemformatan warisan TimeSpan .
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
Ketika kode berikut dijalankan di domain aplikasi baru, kode tersebut kembali ke perilaku pemformatan warisan TimeSpan .
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk