मैं IFormatProvider
कार्यान्वयन बनाने की कोशिश कर रहा था जो डेटटाइम ऑब्जेक्ट्स के लिए कस्टम प्रारूप स्ट्रिंग को पहचान लेगा।डेटटाइम के लिए कस्टम IFormatProvider कैसे बनाएं और उपयोग करें?
public class MyDateFormatProvider : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
{
return this;
}
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if(arg == null) throw new ArgumentNullException("arg");
if (arg.GetType() != typeof(DateTime)) return arg.ToString();
DateTime date = (DateTime)arg;
switch(format)
{
case "mycustomformat":
switch(CultureInfo.CurrentCulture.Name)
{
case "en-GB":
return date.ToString("ddd dd MMM");
default:
return date.ToString("ddd MMM dd");
}
default:
throw new FormatException();
}
}
मैं बहुत तरह DateTime.ToString(string format, IFormatProvider provider)
विधि में इसका इस्तेमाल करने में सक्षम होने की उम्मीद कर रहा था, लेकिन: अमेरिका संस्कृति में चल
DateTime d = new DateTime(2000, 1, 2);
string s = d.ToString("mycustomformat", new MyDateFormatProvider());
कि उदाहरण में,, परिणाम है यहाँ मेरी कार्यान्वयन है "00cu0Ao00or0aA"
, जाहिर है क्योंकि मानक डेटटाइम प्रारूप तारों का व्याख्या किया जा रहा है।
हालांकि, जब मैं निम्नलिखित तरीके से एक ही कक्षा का उपयोग करें:
DateTime d = new DateTime(2000, 1, 2);
string s = String.Format(new MyDateFormatProvider(), "{0:mycustomformat}", d);
मुझे लगता है मैं क्या उम्मीद हो, अर्थात् "Sun Jan 02"
मैं अलग परिणाम समझ में नहीं आता। क्या कोई समझा सकता है?
धन्यवाद!
विस्तृत उत्तर के लिए धन्यवाद। मैं सोच रहा था कि मैं इंटरफ़ेस और अपेक्षित कार्यान्वयन को गलत समझ रहा था, इसलिए यह जानना अच्छा है कि यह डेटटाइम कार्यान्वयन है जो निराशाजनक है :-) –