تحليل التواريخ الدقيقة في C# لا ينبغي أن يجبرك على إنشاء IFormatProvider

StackOverflow https://stackoverflow.com/questions/64640

سؤال

يرجى تصحيح لي إذا كنت مخطئًا، ولكن تحليل تواريخ 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؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top