Panduan: Mengatasi waktu yang ambigu
Waktu ambigu adalah waktu yang memetakan ke lebih dari satu Waktu Universal Terkoordinasi (UTC). Ini terjadi ketika waktu jam disesuaikan kembali dalam waktu, seperti selama transisi dari waktu musim panas zona waktu ke waktu standarnya. Saat menangani waktu yang ambigu, Anda dapat melakukan salah satu hal berikut:
Buat asumsi tentang bagaimana waktu memetakan ke UTC. Misalnya, Anda dapat mengasumsikan bahwa waktu ambigu selalu dinyatakan dalam waktu standar zona waktu.
Jika waktu ambigu adalah item data yang dimasukkan oleh pengguna, Anda dapat menyerahkannya kepada pengguna untuk menyelesaikan ambiguitas.
Topik ini menunjukkan cara mengatasi waktu yang ambigu dengan mengasumsikan bahwa topik tersebut mewakili waktu standar zona waktu.
Untuk memetakan waktu ambigu ke waktu standar zona waktu
Panggil metode IsAmbiguousTime untuk menentukan apakah waktunya ambigu.
Jika waktu ambigu, kurangi waktu dari objek TimeSpan yang dikembalikan oleh properti BaseUtcOffset zona waktu.
Panggil
static
metode (Shared
dalam Visual Basic .NET) SpecifyKind untuk mengatur properti nilai tanggal dan waktu Kind UTC ke DateTimeKind.Utc.
Contoh
Contoh berikut ini menggambarkan cara mengonversi waktu ambigu ke UTC dengan mengasumsikan bahwa itu mewakili waktu standar zona waktu lokal.
private static DateTime ResolveAmbiguousTime(DateTime ambiguousTime)
{
// Time is not ambiguous
if (!TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime))
{
return ambiguousTime;
}
// Time is ambiguous
else
{
DateTime utcTime = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset,
DateTimeKind.Utc);
Console.WriteLine("{0} local time corresponds to {1} {2}.",
ambiguousTime, utcTime, utcTime.Kind.ToString());
return utcTime;
}
}
Private Function ResolveAmbiguousTime(ambiguousTime As Date) As Date
' Time is not ambiguous
If Not TimeZoneInfo.Local.IsAmbiguousTime(ambiguousTime) Then
Return TimeZoneInfo.ConvertTimeToUtc(ambiguousTime)
' Time is ambiguous
Else
Dim utcTime As Date = DateTime.SpecifyKind(ambiguousTime - TimeZoneInfo.Local.BaseUtcOffset, DateTimeKind.Utc)
Console.WriteLine("{0} local time corresponds to {1} {2}.", ambiguousTime, utcTime, utcTime.Kind.ToString())
Return utcTime
End If
End Function
Contohnya terdiri dari sebuah metode bernama ResolveAmbiguousTime
yang menentukan apakah nilai DateTime yang diteruskan ke metode tersebut ambigu. Jika nilainya ambigu, metode mengembalikan nilai DateTime yang mewakili waktu UTC yang sesuai. Metode menangani konversi ini dengan mengurangi nilai properti BaseUtcOffset zona waktu lokal dari waktu setempat.
Biasanya, waktu ambigu ditangani dengan memanggil metode GetAmbiguousTimeOffsets untuk mengambil array dari objek TimeSpan yang berisi kemungkinan offset UTC waktu ambigu. Namun, contoh ini membuat asumsi arbitrer bahwa waktu yang ambigu harus selalu dipetakan ke waktu standar zona waktu. Properti BaseUtcOffset mengembalikan offset antara UTC dan waktu standar zona waktu.
Dalam contoh ini, semua referensi ke zona waktu lokal dibuat melalui TimeZoneInfo.Local properti; zona waktu lokal tidak pernah ditetapkan ke variabel objek. Ini adalah praktik yang direkomendasikan karena panggilan ke metode TimeZoneInfo.ClearCachedData membatalkan objek apa pun yang ditetapkan zona waktu lokal.
Lihat juga
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