Panduan: Memulihkan zona waktu dari sumber daya yang disematkan
Topik ini menjelaskan cara memulihkan zona waktu yang telah disimpan dalam file sumber daya. Untuk informasi dan instruksi tentang menyimpan zona waktu, lihat Cara: Menyimpan zona waktu ke sumber daya yang disematkan.
Untuk mendeserialisasi objek TimeZoneInfo dari sumber daya yang disematkan
Jika zona waktu yang akan diambil bukan zona waktu kustom, coba buat instans dengan menggunakan FindSystemTimeZoneById metode.
Membuat instans ResourceManager objek dengan meneruskan nama file sumber daya yang sepenuhnya memenuhi syarat dan referensi ke rakitan yang berisi file sumber.
Jika Anda tidak dapat menentukan nama file sumber yang sepenuhnya memenuhi syarat, gunakan Ildasm.exe (IL Disassembler) untuk memeriksa manifes assembly. Entri
.mresource
mengidentifikasi sumber daya. Dalam contoh, nama sumber daya yang sepenuhnya memenuhi syarat adalahSerializeTimeZoneData.SerializedTimeZones
.Jika file sumber disematkan dalam assembly yang sama yang berisi kode instansiasi zona waktu, Anda dapat mengambil referensi ke file tersebut
static
dengan memanggil metode (Shared
dalam Visual Basic). GetExecutingAssembly.Jika panggilan ke FindSystemTimeZoneById metode gagal, atau jika zona waktu kustom akan dibuat, ambil string yang berisi zona waktu yang diserialisasikan dengan memanggil ResourceManager.GetString metode.
Mendeserialisasikan data zona waktu dengan memanggil FromSerializedString metode.
Contoh
Contoh berikut mendeserialisasikan objek yang TimeZoneInfo disimpan dalam file sumber .NET XML yang disematkan.
private void DeserializeTimeZones()
{
TimeZoneInfo cst, palmer;
string timeZoneString;
ResourceManager resMgr = new ResourceManager("SerializeTimeZoneData.SerializedTimeZones", this.GetType().Assembly);
// Attempt to retrieve time zone from system
try
{
cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
}
catch (TimeZoneNotFoundException)
{
// Time zone not in system; retrieve from resource
timeZoneString = resMgr.GetString("CentralStandardTime");
if (! String.IsNullOrEmpty(timeZoneString))
{
cst = TimeZoneInfo.FromSerializedString(timeZoneString);
}
else
{
MessageBox.Show("Unable to create Central Standard Time Zone. Application must exit.", "Application Error");
return;
}
}
// Retrieve custom time zone
try
{
timeZoneString = resMgr.GetString("PalmerStandardTime");
palmer = TimeZoneInfo.FromSerializedString(timeZoneString);
}
catch (MissingManifestResourceException)
{
MessageBox.Show("Unable to retrieve the Palmer Standard Time Zone from the resource file. Application must exit.");
return;
}
}
Private Sub DeserializeTimeZones()
Dim cst, palmer As TimeZoneInfo
Dim timeZoneString As String
Dim resMgr As ResourceManager = New ResourceManager("SerializeTimeZoneData.SerializedTimeZones",
GetType(SerializeTimeZoneData).Assembly)
' Attempt to retrieve time zone from system
Try
cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
Catch ex As TimeZoneNotFoundException
' Time zone not in system; retrieve from resource
timeZoneString = resMgr.GetString("CentralStandardTime")
If Not String.IsNullOrEmpty(timeZoneString) Then
cst = TimeZoneInfo.FromSerializedString(timeZoneString)
Else
MsgBox("Unable to create Central Standard Time Zone. Application must exit.")
Exit Sub
End If
End Try
' Retrieve custom time zone
Try
timeZoneString = resMgr.GetString("PalmerStandardTime")
palmer = TimeZoneInfo.FromSerializedString(timeZoneString)
Catch ex As Exception
MsgBox(ex.GetType().Name & ": Unable to create Palmer Standard Time Zone. Application must exit.")
Exit Sub
End Try
End Sub
Kode ini menggambarkan penanganan pengecualian untuk memastikan bahwa objek yang TimeZoneInfo diperlukan oleh aplikasi ada. Pertama-tama mencoba membuat instans TimeZoneInfo objek dengan mengambilnya dari registri menggunakan FindSystemTimeZoneById metode. Jika zona waktu tidak dapat dibuat, kode mengambilnya dari file sumber yang disematkan.
Karena data untuk zona waktu kustom (zona waktu yang dibuat dengan menggunakan CreateCustomTimeZone metode ) tidak disimpan dalam registri, kode tidak memanggil FindSystemTimeZoneById untuk membuat instans zona waktu untuk Palmer, Antartika. Sebagai gantinya, segera melihat ke file sumber yang disematkan untuk mengambil string yang berisi data zona waktu sebelum memanggil FromSerializedString metode.
Mengompilasi kode
Contoh ini membutuhkan:
Bahwa referensi ke System.Windows.Forms.dll dan System.Core.dll ditambahkan ke proyek.
Bahwa namespace layanan berikut diimpor:
using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Reflection; using System.Resources; using System.Windows.Forms;
Imports System.Globalization Imports System.IO Imports System.Reflection Imports System.Resources
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