سؤال

كنت أتلاعب بالطريقة Datetime.ParseExact، وهي تريد IFormatProvider...

إنه يعمل بإدخال قيمة فارغة، ولكن ماذا يفعل بالضبط؟

هل كانت مفيدة؟

المحلول

في ADITION إلى الإجابة إيان بويد:

وأيضا CultureInfo تطبق هذه الواجهة، ويمكن استخدامها في قضيتك. لذلك يمكن أن تحليل سلسلة تاريخ الفرنسية على سبيل المثال. هل يمكن استخدام

var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);

نصائح أخرى

ال IFormatProvider يتم تنفيذ الواجهة عادةً لك بواسطة أ CultureInfo الطبقة، على سبيل المثال:

  • CultureInfo.CurrentCulture
  • CultureInfo.CurrentUICulture
  • CultureInfo.InvariantCulture
  • CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)

الواجهة عبارة عن بوابة لوظيفة للحصول على مجموعة من البيانات الخاصة بالثقافة من الثقافة.الكائنان الثقافيان المتاحان بشكل شائع IFormatProvider يمكن الاستعلام عنها وهي:

  • DateTimeFormatInfo
  • NumberFormatInfo

الطريقة التي تعمل بها عادة هي أن تسأل IFormatProvider لتعطيك أ DateTimeFormatInfo هدف:

DateTimeFormatInfo format;
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
if (format != null)
   DoStuffWithDatesOrTimes(format);

هناك أيضًا معرفة داخلية بأن أي IFormatProvider من المحتمل أن يتم تنفيذ الواجهة بواسطة فئة تنحدر من CultureInfo, ، أو ينحدر منها DateTimeFormatInfo, ، حتى تتمكن من إرسال الواجهة مباشرة:

CultureInfo info = provider as CultureInfo;
if (info != null)
   format = info.DateTimeInfo;
else
{
   DateTimeFormatInfo dtfi = provider as DateTimeFormatInfo;
   if (dtfi != null)
       format = dtfi;
   else
       format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
}

if (format != null)
   DoStuffWithDatesOrTimes(format);

لكن لا تفعل ذلك

لقد تم بالفعل كتابة كل هذا العمل الشاق من أجلك:

للحصول على DateTimeFormatInfo من IFormatProvider:

DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);

للحصول على NumberFormatInfo من IFormatProvider:

NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);

قيمة ال IFormatProvider هو أنك تقوم بإنشاء كائنات الثقافة الخاصة بك.طالما أنهم ينفذون IFormatProvider, ، وإرجاع الكائنات المطلوبة، يمكنك تجاوز الثقافات المضمنة.

تستطيع ايضا استخذام IFormatProvider عن طريقة لتمرير كائنات ثقافية عشوائية - من خلال IFormatProvider.على سبيل المثالاسم الله في الثقافات المختلفة

  • إله
  • إله
  • يهوه
  • الرب
  • יהוה
  • אהיה אשר אהיה

وهذا يتيح العرف الخاص بك LordsNameFormatInfo ركوب الصف على طول داخل IFormatProvider, ، ويمكنك الحفاظ على المصطلح.

في الواقع لن تحتاج إلى الاتصال أبدًا GetFormat طريقة IFormatProvider نفسك.

كلما كنت في حاجة الى IFormatProvider يمكنك تمرير أ CultureInfo هدف:

DateTime.Now.ToString(CultureInfo.CurrentCulture);

endTime.ToString(CultureInfo.InvariantCulture);

transactionID.toString(CultureInfo.CreateSpecificCulture("qps-ploc"));

ملحوظة:يتم إصدار أي رمز في المجال العام.لا الإسناد المطلوبة.

واجتياز اغية كما IFormatProvider ليست الطريقة الصحيحة للقيام بذلك. إذا كان المستخدم لديه تنسيق التاريخ مخصص / الوقت على أجهزة الكمبيوتر الخاصة بهم سيكون لديك قضايا في تحليل وتحويل إلى سلسلة. لقد حددت مجرد خلل فيها شخص ما قد مرت فارغة مثل IFormatProvider عند التحويل إلى السلسلة.

وبدلا من ذلك يجب أن تستخدم CultureInfo.InvariantCulture

وهذا غير صحيح:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);

والصحيح:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);

وهنا يمكنك ان ترى http://msdn.microsoft.com/ أون لنا / مكتبة / system.iformatprovider.aspx

وانظر القسم المخصص للملاحظات والمثال هناك.

IFormatProvider يوفر معلومات الثقافة الأسلوب في السؤال. DateTimeFormatInfo تنفذ IFormatProvider، ويسمح لك لتحديد شكل تريد تاريخك / زمن ليتم عرضها في. يمكن العثور على أمثلة في صفحة MSDN ذات الصلة.

بواسطة MSDN

يتضمن .NET Framework ما يلي ثلاثة تطبيقات IFormatProvider المحددة مسبقًا لتوفير معلومات خاصة بالثقافة يتم استخدامها في تنسيق أو تحليل القيم الرقمية وقيم التاريخ والوقت:

  1. ال NumberFormatInfo فئة، والتي توفر المعلومات المستخدمة لتنسيق الأرقام، مثل العملة، وفاصل الآلاف، ورموز الفواصل العشرية لثقافة معينة.للحصول على معلومات حول سلاسل التنسيق المحددة مسبقًا والتي تم التعرف عليها بواسطة a NumberFormatInfo كائن ويستخدم في عمليات التنسيق الرقمي، راجع سلاسل التنسيق الرقمي القياسية وسلاسل التنسيق الرقمي المخصصة.
  2. ال DateTimeFormatInfo فئة، والتي توفر المعلومات المستخدمة لتنسيق التواريخ والأوقات، مثل رموز فاصل التاريخ والوقت لثقافة معينة أو ترتيب وتنسيق مكونات السنة والشهر واليوم للتاريخ.للحصول على معلومات حول سلاسل التنسيق المحددة مسبقًا والتي تم التعرف عليها بواسطة a DateTimeFormatInfo الكائن والمستخدم في عمليات التنسيق الرقمي، راجع سلاسل تنسيق التاريخ والوقت القياسية وسلاسل تنسيق التاريخ والوقت المخصصة.
  3. ال CultureInfo الطبقة التي تمثل ثقافة معينة.إنه GetFormat تقوم الطريقة بإرجاع ثقافة محددة NumberFormatInfo أو DateTimeFormatInfo الكائن، اعتمادًا على ما إذا كان CultureInfo يتم استخدام الكائن في عملية تنسيق أو تحليل تتضمن أرقامًا أو تواريخ وأوقات.

يدعم .NET Framework أيضًا التنسيق المخصص.يتضمن هذا عادةً إنشاء فئة تنسيق تطبق كلاً من IFormatProvider وICustomFormatter.يتم بعد ذلك تمرير مثيل لهذه الفئة كمعلمة إلى أسلوب ينفذ عملية تنسيق مخصصة، مثل String.Format(IFormatProvider, String, Object[]).

DateTimeFormatInfo الطبقة تطبق هذه الواجهة، لذلك يسمح لك للسيطرة على تنسيق سلاسل التاريخ والوقت الخاص بك.

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