تحليل التواريخ الدقيقة في C# لا ينبغي أن يجبرك على إنشاء IFormatProvider
-
09-06-2019 - |
سؤال
يرجى تصحيح لي إذا كنت مخطئًا، ولكن تحليل تواريخ yyyy/MM/dd (أو تنسيقات محددة أخرى) في C# يجب يكون سهلا كما
DateTime.ParseExact(theDate, "yyyy/MM/dd");
ولكن لا، C# يفرض عليك إنشاء IFormatProvider.
هل هناك طريقة سهلة الاستخدام لـ app.config لتعيين هذا حتى لا أحتاج إلى القيام بذلك في كل مرة؟
DateTime.ParseExact(theDate, "yyyy/MM/dd", new CultureInfo("en-CA", true));
المحلول
يمكن أن تكون الوسيطة IFormatProvider فارغة.
نصائح أخرى
يحتاج ParseExact إلى ثقافة:فكر في "yyyy MMM dd".سيكون MMM اسم شهر مترجم يستخدم الثقافة الحالية.
استخدم ثقافة التطبيق الحالية:
DateTime.ParseExact("2008/12/05", "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture);
يمكنك ضبط ثقافة التطبيق في app.config باستخدام علامة العولمة.أظن.
إنشاء طريقة التمديد:
public static DateTime ParseExactDateTime(this string dateString, string formatString) {
return DateTime.ParseExact(dateString, formatString, new CultureInfo("en-CA", true));
}
ويتطلب الأمر موفر التنسيق لتحديد رموز وسلاسل التاريخ والوقت المحددة (مثل أسماء أيام الأسبوع بلغة معينة).يمكنك استخدام قيمة فارغة، وفي هذه الحالة يتم استخدام كائن CultureInfo الذي يتوافق مع الثقافة الحالية.
إذا كنت لا تريد تحديده في كل مرة، فقم بإنشاء طريقة ملحق تمرر إما null أو CultureInfo("en-CA"، true) كموفر التنسيق.
يمكنك أيضًا إنشاء IFormatProvider مرة واحدة وتخزينه لاستخدامه لاحقًا.
يمكنك أيضًا استخدام فئة التحويل
Convert.ToDateTime("2008/11/25");
// تحويل التاريخ إلى تنسيق متوافق مع MySql
DateTime DateValue = Convert.ToDateTime(datetimepicker.text);
سلسلة قيمة التاريخ = DateValue.ToString("yyyy-MM-dd");
ما الخطأ في استخدام Globalization.CultureInfo.InvariantCulture؟