আমি ডেটটাইম.পার্সেক্স্যাক্ট পদ্ধতিটি নিয়ে খেলছিলাম এবং এটি আইফর্ম্যাটপ্রোভাইডার চায় ...
এটি নালকে ইনপুট দেওয়ার কাজ করে তবে এটি ঠিক কী করে?
আমি ডেটটাইম.পার্সেক্স্যাক্ট পদ্ধতিটি নিয়ে খেলছিলাম এবং এটি আইফর্ম্যাটপ্রোভাইডার চায় ...
এটি নালকে ইনপুট দেওয়ার কাজ করে তবে এটি ঠিক কী করে?
উত্তর:
আয়ান বয়েডের উত্তরের অনুরোধে:
এছাড়াও CultureInfoএই ইন্টারফেস প্রয়োগ করে এবং আপনার ক্ষেত্রে ব্যবহার করা যেতে পারে। সুতরাং আপনি উদাহরণস্বরূপ কোনও ফরাসি তারিখের স্ট্রিং পার্স করতে পারেন; আপনি ব্যবহার করতে পারেন
var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);
DateTime.ParseExact(string, string, IFormatProvider)পরিবর্তে আপনার অবশ্যই ব্যবহার করা উচিত , আমি বিশ্বাস করি - যেমন: DateTime.ParseExact("20160409 111559","yyyyMMdd HHmmss",CultureInfo.CurrentCulture)
DateTime dt = DateTime.Parse(yourDateInputString, ci);করে আপনার উত্তরটি সংশোধন করুন।
IFormatProviderইন্টারফেস সাধারণত একটি দ্বারা আপনার জন্য বাস্তবায়িত হয় CultureInfoবর্গ, যেমন:
CultureInfo.CurrentCultureCultureInfo.CurrentUICultureCultureInfo.InvariantCultureCultureInfo.CreateSpecificCulture("de-CA") //German (Canada)কোনও সংস্কৃতি থেকে সংস্কৃতি-নির্দিষ্ট ডেটার একটি সেট পেতে কোনও ক্রিয়াকলাপের জন্য ইন্টারফেসটি একটি প্রবেশদ্বার। দুটি সাধারণভাবে উপলব্ধ সংস্কৃতি অবজেক্টগুলির IFormatProviderজন্য যেগুলির জন্য অনুসন্ধান করা যেতে পারে:
এটি সাধারণত যেভাবে কাজ করবে তা হ'ল আপনি 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। যেমন বিভিন্ন সংস্কৃতিতে ofশ্বরের নাম
এটি আপনার কাস্টম LordsNameFormatInfoক্লাসটির অভ্যন্তরে প্রবেশ IFormatProviderকরতে দেয় এবং আপনি প্রতিমাটি সংরক্ষণ করতে পারেন।
বাস্তবে আপনাকে নিজের GetFormatপদ্ধতিটি কখনও কল করতে হবে না IFormatProvider।
যখনই আপনার প্রয়োজন হবে IFormatProviderআপনি কোনও CultureInfoবস্তুটি পাস করতে পারেন :
DateTime.Now.ToString(CultureInfo.CurrentCulture);
endTime.ToString(CultureInfo.InvariantCulture);
transactionID.toString(CultureInfo.CreateSpecificCulture("qps-ploc"));
দ্রষ্টব্য : যে কোনও কোড পাবলিক ডোমেনে প্রকাশিত হয়। কোনও অ্যাট্রিবিউশনের প্রয়োজন নেই।
নাল হিসাবে পাস করা এটি 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);
CultureInfo.InvariantCultureপরিবর্তে আমাদের ব্যবহার করার কোনও কারণ আছে CultureInfo.CurrentCulture?
nullডিফল্ট হবে CultureInfo.CurrentCulture। রেফারেন্স উত্সে কলটি দেখুন , আপনি যদি কলগুলির শৃঙ্খলাটি বরাবর অনুসরণ করেন, অবশেষে নালটি প্রতিস্থাপন হয়ে যায় DateTimeFormatInfo.CurrentInfoযা কোন CultureInfo.CurrentCultureফলাফলের সমান ।
আইফর্ম্যাটপ্রোভাডার প্রশ্নযুক্ত পদ্ধতিতে সংস্কৃতি সম্পর্কিত তথ্য সরবরাহ করে। DateTimeFormatInfo কার্যকরী IFormatProvider, এবং আপনি বিন্যাস যদি আপনি চান আপনার তারিখ / সময় প্রদর্শিত হবে নির্দিষ্ট করার অনুমতি দেয়। উদাহরণ প্রাসঙ্গিক দুটিই MSDN পাতায় পাওয়া যেতে পারে।
আপনি এখানে দেখতে পারেন http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx
মন্তব্য এবং উদাহরণ বিভাগ দেখুন।
IFormatProviderকরে না IFormatProvider।
এপিআই-র জন্য http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx দেখুন ।
এমএসডিএন দ্বারা
.NET ফ্রেমওয়ার্কে সংস্কৃতি-নির্দিষ্ট তথ্য প্রদানের জন্য নিম্নলিখিত তিনটি পূর্বনির্ধারিত আইফর্ম্যাটপ্রোভাডার বাস্তবায়ন অন্তর্ভুক্ত রয়েছে যা সংখ্যার এবং তারিখ এবং সময় মানগুলি বিন্যাস বা পার্সিংয়ে ব্যবহৃত হয়:
NumberFormatInfoবর্গ, যা তথ্য একটি নির্দিষ্ট সংস্কৃতির জন্য মুদ্রার মতো বিন্যাস নম্বর,, সহস্র বিভাজক, এবং দশমিক বিভাজক চিহ্ন ব্যবহার করা হয় প্রদান করে। কোনও NumberFormatInfoঅবজেক্টের দ্বারা স্বীকৃত এবং সংখ্যাসূচক ফর্ম্যাটিং ক্রিয়াকলাপে ব্যবহৃত পূর্বনির্ধারিত ফর্ম্যাট স্ট্রিং সম্পর্কে তথ্যের জন্য , স্ট্যান্ডার্ড সংখ্যাসূচক ফর্ম্যাট স্ট্রিংস এবং কাস্টম সংখ্যাসূচক ফর্ম্যাট স্ট্রিংগুলি দেখুন।DateTimeFormatInfoবর্গ, কোন তথ্য যে এই ধরনের একটি নির্দিষ্ট সংস্কৃতি বা অর্ডার ও একটি তারিখ এর বছর, মাস, দিন উপাদান বিন্যাসের তারিখ এবং সময় বিভাজক চিহ্ন হিসাবে ফর্ম্যাট তারিখ ও সময়, এর ব্যবহার করা হয় প্রদান করে। কোনও DateTimeFormatInfoঅবজেক্টের দ্বারা স্বীকৃত এবং সংখ্যাসূচক ফর্ম্যাটিং ক্রিয়াকলাপে ব্যবহৃত পূর্বনির্ধারিত ফর্ম্যাট স্ট্রিং সম্পর্কে তথ্যের জন্য , স্ট্যান্ডার্ড তারিখ এবং সময় ফর্ম্যাট স্ট্রিংস এবং কাস্টম তারিখ এবং সময় ফর্ম্যাট স্ট্রিংগুলি দেখুন।CultureInfoবর্গ, যা একটি নির্দিষ্ট সংস্কৃতি প্রতিনিধিত্ব করে। এর GetFormatপদ্ধতিটি কোনও সংস্কৃতি-নির্দিষ্ট NumberFormatInfoবা DateTimeFormatInfoঅবজেক্টকে প্রত্যাবর্তন করে , যা CultureInfoকোনও সংখ্যা বা তারিখ এবং সময়গুলিতে জড়িত কোনও ফর্ম্যাটিং বা পার্সিং অপারেশনে ব্যবহৃত হয় কিনা তার উপর নির্ভর করে ।.NET ফ্রেমওয়ার্ক কাস্টম বিন্যাসকে সমর্থন করে। এটি সাধারণত একটি ফর্ম্যাটিং ক্লাস তৈরির সাথে জড়িত যা আইফর্ম্যাটপ্রোভিডার এবং আইসিস্টম ফোর্ম্যাটর উভয়ই প্রয়োগ করে। এরপরে এই শ্রেণীর একটি উদাহরণ প্যারামিটার হিসাবে কোনও পদ্ধতিতে পাস করা হয় যা একটি কাস্টম বিন্যাস অপারেশন সম্পাদন করে, যেমন String.Format(IFormatProvider, String, Object[])।
DateTimeFormatInfo বর্গ কার্যকরী এই ইন্টারফেস, তাই এটি আপনি আপনার তারিখসময় স্ট্রিং বিন্যাস নিয়ন্ত্রণ করতে দেয়।