Cara: Mendapatkan objek TimeZoneInfo

Cara paling umum untuk mendapatkan TimeZoneInfo objek adalah dengan mengambil informasi tentang hal itu dari registri. Untuk mendapatkan objek, panggil static metode (Shared dalam Visual Basic), TimeZoneInfo.FindSystemTimeZoneById yang terlihat di registri. Tangani pengecualian apa pun yang dilemparkan oleh metode , terutama TimeZoneNotFoundException yang dilemparkan jika zona waktu tidak ditentukan dalam registri.

Catatan

Mulai dari .NET 8, TimeZoneInfo.FindSystemTimeZoneById mengembalikan objek yang di-cache TimeZoneInfo alih-alih membuat instans objek baru. Untuk informasi selengkapnya, lihat FindSystemTimeZoneById tidak mengembalikan objek baru.

Contoh

Kode berikut mengambil TimeZoneInfo objek yang mewakili zona Waktu Standar Timur dan menampilkan waktu Standar Timur yang sesuai dengan waktu lokal.

DateTime timeNow = DateTime.Now;
try
{
    TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    DateTime easternTimeNow = TimeZoneInfo.ConvertTime(
        timeNow,
        TimeZoneInfo.Local,
        easternZone
        );
    Console.WriteLine("{0} {1} corresponds to {2} {3}.",
                      timeNow,
                      TimeZoneInfo.Local.IsDaylightSavingTime(timeNow) ?
                                TimeZoneInfo.Local.DaylightName :
                                TimeZoneInfo.Local.StandardName,
                      easternTimeNow,
                      easternZone.IsDaylightSavingTime(easternTimeNow) ?
                                  easternZone.DaylightName :
                                  easternZone.StandardName);
}
// Handle exception
//
// As an alternative to simply displaying an error message, an alternate Eastern
// Standard Time TimeZoneInfo object could be instantiated here either by restoring
// it from a serialized string or by providing the necessary data to the
// CreateCustomTimeZone method.
catch (TimeZoneNotFoundException)
{
    Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.");
}
catch (InvalidTimeZoneException)
{
    Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.");
}
catch (SecurityException)
{
    Console.WriteLine("The application lacks permission to read time zone information from the registry.");
}
catch (OutOfMemoryException)
{
    Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.");
}
// If we weren't passing FindSystemTimeZoneById a literal string, we also
// would handle an ArgumentNullException.
Dim timeNow As Date = Date.Now
Try
    Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
    Dim easternTimeNow As Date = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, easternZone)
    Console.WriteLine("{0} {1} corresponds to {2} {3}.", _
                      timeNow, _
                      IIf(TimeZoneInfo.Local.IsDaylightSavingTime(timeNow), _
                          TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), _
                      easternTimeNow, _
                      IIf(easternZone.IsDaylightSavingTime(easternTimeNow), _
                          easternZone.DaylightName, easternZone.StandardName))
    ' Handle exception
    '
    ' As an alternative to simply displaying an error message, an alternate Eastern
    ' Standard Time TimeZoneInfo object could be instantiated here either by restoring
    ' it from a serialized string or by providing the necessary data to the
    ' CreateCustomTimeZone method.
Catch e As TimeZoneNotFoundException
    Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.")
Catch e As InvalidTimeZoneException
    Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.")
Catch e As SecurityException
    Console.WriteLine("The application lacks permission to read time zone information from the registry.")
Catch e As OutOfMemoryException
    Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.")
    ' If we weren't passing FindSystemTimeZoneById a literal string, we also 
    ' would handle an ArgumentNullException.
End Try

Parameter TimeZoneInfo.FindSystemTimeZoneById tunggal metode adalah pengidentifikasi zona waktu yang ingin Anda ambil, yang sesuai dengan properti objek TimeZoneInfo.Id. Pengidentifikasi zona waktu adalah bidang kunci yang secara unik mengidentifikasi zona waktu. Meskipun sebagian besar kunci relatif pendek, pengidentifikasi zona waktu relatif panjang. Dalam kebanyakan kasus, nilainya bersesuaian dengan StandardName properti dari TimeZoneInfo objek, yang digunakan untuk memberikan nama waktu standar zona waktu. Namun, ada pengecualian. Cara terbaik untuk memastikan bahwa Anda memberikan pengidentifikasi yang valid adalah dengan menghitung zona waktu yang tersedia di sistem Anda dan mencatat pengidentifikasi zona waktu yang ada di sana. Untuk ilustrasi, lihat Cara: Menghitung zona waktu yang ada di komputer. Artikel Menemukan zona waktu yang ditentukan pada sistem lokal juga berisi daftar pengidentifikasi zona waktu yang dipilih.

Jika zona waktu ditemukan, metode mengembalikan objeknya TimeZoneInfo. Jika zona waktu tidak ditemukan, metode akan melempar TimeZoneNotFoundException. Jika zona waktu ditemukan tetapi datanya rusak atau tidak lengkap, metode akan melempar InvalidTimeZoneException.

Jika aplikasi Anda bergantung pada zona waktu yang harus ada, Anda harus terlebih dahulu memanggil FindSystemTimeZoneById metode untuk mengambil informasi zona waktu dari registri. Jika panggilan metode gagal, handler pengecualian Anda kemudian harus membuat instans baru zona waktu atau membuatnya kembali dengan mendeserialisasikan objek berseri TimeZoneInfo. Lihat Cara: Memulihkan zona waktu dari sumber daya yang disematkan untuk contoh.

Lihat juga