Saya bermain-main dengan metode Datetime.ParseExact, dan ia menginginkan IFormatProvider ...
Ia bekerja memasukkan null, tetapi apa sebenarnya fungsinya?
c#
asp.net
iformatprovider
Moulde
sumber
sumber
Jawaban:
Selain jawaban Ian Boyd:
Juga
CultureInfo
mengimplementasikan antarmuka ini dan dapat digunakan dalam kasus Anda. Jadi Anda bisa mengurai string tanggal Prancis misalnya; Anda bisa menggunakansumber
DateTime.ParseExact(string, string, IFormatProvider)
sebagai gantinya, saya percaya - seperti itu:DateTime.ParseExact("20160409 111559","yyyyMMdd HHmmss",CultureInfo.CurrentCulture)
DateTime dt = DateTime.Parse(yourDateInputString, ci);
Harap perbaiki jawaban Anda.The
IFormatProvider
antarmuka biasanya dilaksanakan untuk Anda olehCultureInfo
kelas, misalnya:CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.InvariantCulture
CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)
Antarmuka adalah gerbang bagi suatu fungsi untuk mendapatkan sekumpulan data khusus budaya dari suatu budaya. Dua objek budaya yang umum tersedia yang
IFormatProvider
dapat ditanyakan adalah:DateTimeFormatInfo
NumberFormatInfo
Cara biasanya bekerja adalah Anda meminta
IFormatProvider
untuk memberi Anda sebuahDateTimeFormatInfo
objek:Ada juga pengetahuan orang dalam bahwa setiap
IFormatProvider
antarmuka kemungkinan diimplementasikan oleh kelas yang diturunkan dariCultureInfo
, atau diturunkan dariDateTimeFormatInfo
, sehingga Anda dapat mentransmisikan antarmuka secara langsung:Tapi jangan lakukan itu
Semua kerja keras itu telah dituliskan untuk Anda:
Untuk mendapatkan
DateTimeFormatInfo
dariIFormatProvider
:Untuk mendapatkan
NumberFormatInfo
dariIFormatProvider
:Nilai dari itu
IFormatProvider
adalah Anda menciptakan objek budaya Anda sendiri. Selama mereka menerapkanIFormatProvider
, dan mengembalikan objek yang diminta, Anda dapat melewati budaya bawaan.Anda juga dapat menggunakan
IFormatProvider
untuk cara melewati objek budaya sewenang-wenang - melaluiIFormatProvider
. Misalnya nama dewa dalam budaya yang berbedaIni memungkinkan
LordsNameFormatInfo
kelas kustom Anda ikut serta di dalamIFormatProvider
, dan Anda dapat mempertahankan idiom tersebut.Pada kenyataannya Anda tidak perlu menyebut
GetFormat
metodeIFormatProvider
diri Anda sendiri.Kapan pun Anda membutuhkannya,
IFormatProvider
Anda dapat memberikanCultureInfo
objek:sumber
Meneruskan nol sebagai
IFormatProvider
bukan cara yang benar untuk melakukan ini. Jika pengguna memiliki format tanggal / waktu khusus di PC mereka, Anda akan mengalami masalah dalam penguraian dan konversi ke string. Saya baru saja memperbaiki bug di mana seseorang telah mengirimkan null sebagai IFormatProvider saat mengonversi ke string.Sebaliknya Anda harus menggunakan
CultureInfo.InvariantCulture
Salah:
Benar:
sumber
CultureInfo.InvariantCulture
bukanCultureInfo.CurrentCulture
?null
akan default keCultureInfo.CurrentCulture
. Lihat panggilan di sumber referensi , jika Anda mengikuti rangkaian panggilan, null akhirnya diganti denganDateTimeFormatInfo.CurrentInfo
yang setara denganCultureInfo.CurrentCulture
keluaran apa .IFormatProvider memberikan info budaya ke metode yang dimaksud. DateTimeFormatInfo mengimplementasikan IFormatProvider, dan memungkinkan Anda untuk menentukan format yang Anda inginkan untuk menampilkan tanggal / waktu Anda. Contohnya dapat ditemukan pada halaman MSDN yang relevan.
sumber
Anda dapat melihat di sini http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx
Lihat bagian keterangan dan contoh di sana.
sumber
IFormatProvider
tidak digunakanIFormatProvider
.Periksa http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx untuk mengetahui API.
sumber
Oleh MSDN
.NET Framework mencakup tiga implementasi IFormatProvider yang telah ditentukan sebelumnya untuk menyediakan informasi khusus budaya yang digunakan dalam pemformatan atau penguraian nilai numerik dan tanggal dan waktu:
NumberFormatInfo
kelas, yang menyediakan informasi yang digunakan untuk nomor Format, seperti mata uang, pemisah ribuan, dan simbol pemisah desimal untuk budaya tertentu. Untuk informasi tentang string format standar yang dikenali olehNumberFormatInfo
objek dan digunakan dalam operasi pemformatan numerik, lihat String Format Numerik Standar dan String Format Numerik Kustom.DateTimeFormatInfo
kelas, yang menyediakan informasi yang digunakan untuk tanggal Format dan waktu, seperti tanggal dan waktu simbol pemisah untuk budaya tertentu atau urutan dan format komponen tahun, bulan, hari tanggal ini. Untuk informasi tentang string format yang sudah ditentukan sebelumnya yang dikenali olehDateTimeFormatInfo
objek dan digunakan dalam operasi pemformatan numerik, lihat String Format Tanggal dan Waktu Standar dan String Format Tanggal dan Waktu Kustom.CultureInfo
kelas, yang mewakili budaya tertentu. ItsGetFormat
metode mengembalikan budaya khususNumberFormatInfo
atauDateTimeFormatInfo
objek, tergantung pada apakahCultureInfo
objek yang digunakan dalam operasi format atau parsing yang melibatkan angka atau tanggal dan waktu..NET Framework juga mendukung pemformatan kustom. Ini biasanya melibatkan pembuatan kelas pemformatan yang mengimplementasikan IFormatProvider dan ICustomFormatter. Sebuah instance dari kelas ini kemudian diteruskan sebagai parameter ke metode yang melakukan operasi pemformatan khusus, seperti
String.Format(IFormatProvider, String, Object[])
.sumber
Kelas DateTimeFormatInfo mengimplementasikan antarmuka ini, sehingga memungkinkan Anda untuk mengontrol pemformatan string DateTime Anda.
sumber