Setelah beberapa menggali dan akhirnya aku menetapkan Thread's CurrentCulture nilai untuk memiliki CultureInfo ( 'en-US') dalam metode aksi kontroler:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")
Berikut adalah beberapa opsi lain jika Anda ingin memiliki pengaturan ini di setiap tampilan.
Tentang CurrentCulturenilai properti:
The CultureInfo objek yang dikembalikan oleh properti ini, bersama-sama dengan benda-benda yang terkait, menentukan format default untuk tanggal, waktu, nomor, nilai mata uang, urutan pemilahan teks, konvensi casing, dan perbandingan string.
Sumber: MSDN CurrentCulture
Catatan:CurrentCulture Pengaturan properti sebelumnya mungkin opsional jika pengontrol sudah berjalan dengan CultureInfo("en-US")atau serupa di mana format tanggalnya "MM/dd/yyyy".
Setelah mengatur CurrentCultureproperti, tambahkan blok kode untuk mengubah tanggal ke "M/d/yyyy"format dalam tampilan:
@{
var shortDateLocalFormat = "";
if (Model.AuditDate.HasValue) {
shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
}
}
@shortDateLocalFormat
Di atas @shortDateLocalFormatvariabel diformat dengan ToString("M/d/yyyy")karya. Jika ToString("MM/dd/yyyy")digunakan, seperti yang saya lakukan pertama kali maka Anda akhirnya memiliki masalah nol . Juga seperti yang direkomendasikan oleh Tommy ToString("d") bekerja juga. Sebenarnya "d"adalah singkatan dari "Pola tanggal pendek" dan dapat digunakan dengan format budaya / bahasa yang berbeda juga.
Saya kira blok kode dari atas juga dapat diganti dengan beberapa metode pembantu keren atau serupa.
Sebagai contoh
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
}
@shortDateLocalFormat
}
dapat digunakan dengan panggilan pembantu ini
@DateFormatter(Model.AuditDate)
Pembaruan , saya menemukan bahwa ada cara alternatif untuk melakukan hal yang sama ketika metode DateTime.ToString (String, IFormatProvider) digunakan. Ketika metode ini digunakan maka tidak perlu menggunakan Thread's CurrentCultureproperti. The CultureInfo("en-US")dilewatkan sebagai argumen kedua -> IFormatProvider ke DateTime.ToString(String, IFormatProvider)metode.
Metode pembantu yang dimodifikasi:
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US"));
}
@shortDateLocalFormat
}
.NET Fiddle
No overload for method 'ToString' takes 1 arguments