Saya harus dapat membandingkan beberapa nama bulan yang saya miliki dalam sebuah array.
Alangkah baiknya jika ada beberapa cara langsung seperti:
Month.toInt("January") > Month.toInt("May")
Pencarian Google saya tampaknya menyarankan satu-satunya cara adalah menulis metode Anda sendiri, tetapi ini sepertinya masalah yang cukup umum sehingga saya pikir itu akan sudah diterapkan di .Net, ada yang melakukan ini sebelumnya?
Anda bisa melakukan sesuatu seperti ini:
sumber
Jika Anda menggunakan
DateTime.ParseExact()
-metode yang disarankan beberapa orang, Anda harus mempertimbangkan dengan cermat apa yang Anda inginkan terjadi ketika aplikasi berjalan di lingkungan non-Inggris!Di Denmark, mana dari
ParseExact("Januar", ...)
danParseExact("January", ...)
harus berhasil dan mana yang harus gagal?Itulah perbedaan antara
CultureInfo.CurrentCulture
danCultureInfo.InvariantCulture
.sumber
Salah satu solusi sederhana adalah membuat Kamus dengan nama dan nilai. Kemudian menggunakan Contains () Anda dapat menemukan nilai yang tepat.
sumber
Anda dapat menggunakan metode DateTime.Parse untuk mendapatkan objek DateTime lalu memeriksa properti Bulannya. Lakukan sesuatu seperti ini:
Triknya adalah membuat tanggal yang valid untuk membuat objek DateTime.
sumber
Anda dapat menggunakan enum bulan:
Saya tidak 100% yakin tentang sintaks untuk enum.Parse (), meskipun.
sumber
public enum Month { January = 1, Feburary }
dan juga melemparkan ke int, bukan Bulan.Anda tidak perlu membuat instance DateTime untuk melakukan ini. Sesederhana ini:
Saya menjalankan
da-DK
budaya, jadi tes unit ini lolos:Saya akan menyerahkannya sebagai latihan kepada pembaca untuk membuat kelebihan beban di mana Anda bisa meneruskan CultureInfo eksplisit.
sumber
ToLower()
- Saya tidak menyadari salah satu kelebihan mengonversi stringusing the casing rules of the specified culture
meskipun agar adil tidak jelas dari nama metode bahwa ia mungkin menyediakan fungsionalitas itu.CurrentCulture
. Keduanya"January".ToLower(CultureInfo.CurrentCulture).Dump();
dan"January".ToLower(new CultureInfo("en-NZ")).Dump();
keluaranjanuary
tetapi nama bulan dikapitalisasi dalamCurrentCulture.DateTimeFormat.MonthNames
.ToLower
:) Sebenarnya, ada cacat logis sedikit dalam kode saya, karena nama-nama bulan yang diberikan karena semua huruf kecil di da-DK. Jadi, salah satu tidak boleh huruf kecil masukan, atau yang lain juga harus huruf kecil semua nama bulan - tergantung pada apakah kecocokan tidak peka huruf besar / kecil diinginkan atau tidak.using the casing rules of the specified culture
berarti bahwa itu akan menggunakan huruf besar misalnya bulan dan hari perCultureInfo
. Yang berfungsi dalam contoh Anda karena nama bulan menggunakan huruf kecil. Demonstrasi yang efektif menggunakan pengujian unit untuk menyesatkan. Mungkin layak untuk diedit untuk memperjelas bahwa contoh Anda adalah kasus tepi :-)Dan menjawab ini tujuh tahun setelah pertanyaan diajukan, adalah mungkin untuk melakukan perbandingan ini menggunakan metode bawaan:
menjadi
Yang dapat direfraktorisasi menjadi metode ekstensi untuk kesederhanaan. Berikut ini adalah contoh LINQPad (karenanya
Dump()
metode memanggil):Dengan keluaran:
sumber
Jika Anda menggunakan c # 3.0 (atau lebih tinggi), Anda dapat menggunakan extender
sumber
kode hati-hati dalam versi Beta.
sumber
Saya menerjemahkannya ke dalam kode C # dalam versi bahasa Spanyol, salam:
sumber
Apa yang saya lakukan adalah menggunakan SimpleDateFormat untuk membuat string format, dan mengurai teks menjadi tanggal, lalu mengambil bulan dari itu. Kode di bawah ini:
sumber
Kode ini membantu Anda ...
Metode GetMonthName - mengembalikan string ...
Jika Anda ingin mendapatkan bulan sebagai bilangan bulat, cukup gunakan -
Saya harap, ini membantu Anda !!!
Terima kasih!!!
sumber